Boost-Geometry-Utils-0.15000755000765000024 012161110675 14274 5ustar00alstaff000000000000Build.PL000444000765000024 154712161110604 15645 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15#!/usr/bin/perl -w use strict; use Module::Build::WithXSpp; my $build = Module::Build::WithXSpp->new( module_name => 'Boost::Geometry::Utils', license => 'perl', 'build_requires' => { 'ExtUtils::Typemaps::Default' => '0.05', 'ExtUtils::XSpp' => '0.16', 'Module::Build' => '0.3601', 'Test::More' => '0' }, 'configure_requires' => { 'ExtUtils::CppGuess' => '0.07', 'Module::Build' => '0.38', 'Module::Build::WithXSpp' => '0.10' }, # HAS_BOOL : stops Perl/lib/CORE/handy.h from doing "# define bool char" for MSVC extra_compiler_flags => [qw(-DHAS_BOOL)], # Provides extra C typemaps that are auto-merged extra_typemap_modules => { 'ExtUtils::Typemaps::Default' => '0.05', }, #for MSVC builds early_includes => [qw( cstring cstdlib ostream )] ); $build->create_build_script; CHANGES000444000765000024 2504012161110601 15353 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15================================================== Changes from 2012-03-31 00:00:00 +0000 to present. ================================================== ----------------------------------------- version 0.15 at 2013-06-21 ----------------------------------------- - Added point_within_multi_polygon() - Added point_covered_by_multi_polygon() ----------------------------------------- version 0.14 at 2013-06-16 ----------------------------------------- - Fix segfault on reading empty multilinestrings ----------------------------------------- version 0.13 at 2013-05-20 ----------------------------------------- - Remove a possible compilation error ----------------------------------------- version 0.12 at 2013-05-19 ----------------------------------------- - Fix compilation on some GCC ----------------------------------------- version 0.11 at 2013-05-19 ----------------------------------------- - Added polygon_area() - Fixed more memory leaks ----------------------------------------- version 0.10 at 2013-05-18 ----------------------------------------- - Added multi_linestring_multi_polygon_difference() - Fixed memory leak in reading multi_linestring input - Fixed memory leak in reading multi_polygon input ----------------------------------------- version 0.09 at 2013-04-11 ----------------------------------------- - fix compilation on Windows after recent Boost update ----------------------------------------- version 0.08 at 2013-04-08 ----------------------------------------- - Updated Boost to 1.53 - Revert to double coordinates instead of integer because Boost computes wrong intersection with integers ----------------------------------------- version 0.07 at 2013-03-31 17:03:07 +0000 ----------------------------------------- Change: cbbf35be3e139a5b21773fa2cf0d9b545dec0d44 Author: Alessandro Ranellucci Date : 2013-03-31 11:45:00 +0000 Add hints for Pod::Coverage Change: 0defa9741671173d2d5395be2343b0e36e266a4e Author: Alessandro Ranellucci Date : 2013-03-15 15:47:04 +0000 New correct_polygon() and correct_multi_polygon() Change: 2b190280466cc54d44f7f1ba7b1a133dcfaeaa07 Author: Alessandro Ranellucci Date : 2013-03-15 15:10:44 +0000 Added multi_polygon_multi_linestring_intersection() Change: b9d2e24cabae84d503759a9b9c096f488064be2c Author: Alessandro Ranellucci Date : 2013-03-14 17:50:01 +0000 Added multi_linestring_centroi() Change: 66e6cf92fa9594d74e6edf433a7adcd80b73289b Author: Alessandro Ranellucci Date : 2013-03-14 17:40:33 +0000 Added linestring_centroid() Change: 1a5fc63410c5433cfced29f909426e0bf677828b Author: Alessandro Ranellucci Date : 2013-03-14 17:37:27 +0000 Added polygon_centroid() Change: dd48d474f1b4b75a24f96589bad1965c81aa2339 Author: Alessandro Ranellucci Date : 2013-03-14 17:18:19 +0000 Added linestring_length Change: 04167004ef25d6fe22c6bfcc6e0463a35c7d06da Author: Alessandro Ranellucci Date : 2013-03-14 17:05:26 +0000 Added multi_linestring_simplify and fixed some files Change: db7138df02bf1e5078f7ebe9d68a196603bca3e2 Author: Alessandro Ranellucci Date : 2013-03-14 16:50:42 +0000 Merge branch 'master' of github.com:alexrj/Boost-Geometry-Utils Change: 29af743cedd602af65deecf056b59ac0c909282a Author: Alessandro Ranellucci Date : 2013-01-28 00:25:03 +0000 Update POD ----------------------------------------- version 0.06 at 2013-02-01 23:04:44 +0000 ----------------------------------------- Change: e2b880930b6f1ca3015d34ee0099f1c629f103ed Author: Alessandro Ranellucci Date : 2013-02-02 00:04:44 +0000 Update Boost to 1.52 Change: 58736a034fb398d7e4f6a00b975a14ce2d122d7a Author: Alessandro Ranellucci Date : 2013-01-27 23:58:02 +0000 Fixed arrayref to polygon conversion and added unit test Change: 885c60668125cd281b7783baf7dc69951e0d0f2e Author: Alessandro Ranellucci Date : 2013-01-27 16:30:38 +0000 Finished polygon2perl() and added unit test for conversion roundtrip Change: 1df409ec73fb4de93db234f9634399c64aba0314 Author: Alessandro Ranellucci Date : 2013-01-27 15:08:11 +0000 Update copyright year Change: 0a0b9442fb84af318e888a0064da6f54474fc9ae Author: Alessandro Ranellucci Date : 2013-01-27 15:07:56 +0000 Added a couple conversion methods to help debugging Change: c3fc121bf240a9b15b69d356b4ffc8088ed52609 Author: Mark Hindess Date : 2012-11-01 17:18:17 +0000 Use integers instead of doubles and fix test to use integers. Change: 71ce53ba110bea82bb32c63e8aef82719bcbea80 Author: Mark Hindess Date : 2012-07-10 22:28:25 +0000 Convert polygon() and linestring() functions to use non-wkt conversion. Change: f95918786093c58de80ab62c0f47355c668fb48e Author: Mark Hindess Date : 2012-07-08 11:41:27 +0000 Attempt to fix/workaround leaking memory. Change: fec904e6630837aef63260b5bdde034b6d570ae5 Author: Mark Hindess Date : 2012-07-08 08:30:55 +0000 Remove pointless reference to boost::geometry::append. Change: e917ff4dbc3eeaa3e2e51cacb0dad649712310d1 Author: Mark Hindess Date : 2012-07-08 07:50:09 +0000 Add point_covered_by_polygon and add tests to cover "edge" cases. Change: 259eed2f7952443be651f87d50772181a363c105 Author: Mark Hindess Date : 2012-07-07 23:40:35 +0000 Add point_within_polygon and linestring_simplify functions and tests. There is a bug in point_within_polygon triggered by: point_within_polygon($point_in_hole, [$hole_in_square,[]]) which I've avoided by changing the test. This needs fixing. Change: d93104e6ebb7ed61f6dca2bd660aca10e6343783 Author: Mark Hindess Date : 2012-07-07 22:38:18 +0000 Fix typo that accidentally worked. Change: ffd640666a4dfc64eaa481e701e5fa10456a0b03 Author: Mark Hindess Date : 2012-07-07 22:19:50 +0000 Trivial whitespace change. Change: 07b52f3ca576db64b4488630b5234e18e7687b84 Author: Mark Hindess Date : 2012-07-07 22:19:17 +0000 Put back 64-bit int support. Change: ce6abfcd8966a3873b5f8c0469f56ac34183bfa8 Author: Mark Hindess Date : 2012-07-07 22:06:13 +0000 Support old API and new polygon_multi_linestring_intersection function. Old API is the same as before but the new version does the return value conversion using the new XS code path rather than the old wkt code. Change: a36005753777bbe951050c1c6f6b1fdb289063ab Author: Mark Hindess Date : 2012-07-07 20:55:10 +0000 Refactor add_outer and add_hole to single add_ring function. Change: 3813ed19a4aae58ccaa3b4b2c1aeb58e68aea791 Author: Mark Hindess Date : 2012-07-07 20:30:56 +0000 Remove some debug and add macros to simplify code. Change: ab1b86acb5ce159af54e23c58aed54768ef0ed31 Author: Mark Hindess Date : 2012-07-07 18:09:58 +0000 Implement boost to perl conversion for multi_linestring. Change: 9808ba60cc64a6dbaddde6e98493e5c8ea7cf5b9 Author: Mark Hindess Date : 2012-07-06 23:11:15 +0000 Convert perl to multi_linestring. Change: 641f20262b6a0fa246b525f3f1639062bc71473a Author: Mark Hindess Date : 2012-07-06 19:14:09 +0000 Fix perl to boost polygon conversion. Lots of debug left in and lots of cleanup to do but it works. Change: d98d2ecd5377635b1c29e947d7e44a82550ac634 Author: Alessandro Ranellucci Date : 2012-07-03 19:10:28 +0000 Unfinished draft for avoiding the WKT roundtrip and having XS work directly on Perl data structures ----------------------------------------- version 0.05 at 2012-04-10 08:39:45 +0000 ----------------------------------------- Change: 680789acf635cfcbdfd5a8c23de5ca99a7ec8680 Author: Alessandro Ranellucci Date : 2012-04-10 10:39:45 +0000 Added build and configure modules to dist.ini and thus META.yml ----------------------------------------- version 0.04 at 2012-04-09 19:51:56 +0000 ----------------------------------------- Change: 3f86a958746db1b72bf49e12e042c87f226089c2 Author: Alessandro Ranellucci Date : 2012-04-09 21:51:56 +0000 Put XSLoader::log() outside of BEGIN in order to allow for DZ to add $VERSION ----------------------------------------- version 0.03 at 2012-04-09 19:41:18 +0000 ----------------------------------------- Change: 1bdc8c6b368bb403f98a5b9b0b55821f133aff91 Author: Alessandro Ranellucci Date : 2012-04-09 21:41:18 +0000 Remove $VERSION so that $Dist::Zilla manages it Change: 3563c5b03dc794210339f785f36cebb02eda22d0 Author: Alessandro Ranellucci Date : 2012-04-09 21:36:55 +0000 Windows/MinGW compatibility Change: f61020399095897d9851b49b921f1b23a03502d8 Author: Alessandro Ranellucci Date : 2012-04-09 14:44:21 +0000 Removed unused file from repository Change: fa97f24271e153753c9191d1d21717c1b0307cf9 Author: Alessandro Ranellucci Date : 2012-04-09 14:28:31 +0000 Prevent Makefile.PL to be generated ----------------------------------------- version 0.02 at 2012-04-09 09:11:10 +0000 ----------------------------------------- Change: b41fe3fe2efcb7bf3dc78dcc92cd1ec29791d347 Author: Alessandro Ranellucci Date : 2012-04-09 11:11:10 +0000 Commit missing files Change: 8d1a6bb587509e1623ba53d00d9da2f5f1bea47c Author: Alessandro Ranellucci Date : 2012-04-09 10:32:37 +0000 Document undocumented methods ----------------------------------------- version 0.01 at 2012-04-09 08:14:32 +0000 ----------------------------------------- Change: 782140226923923bca9a429ce120ebe7ebf6fa38 Author: Alessandro Ranellucci Date : 2012-04-09 10:14:32 +0000 More changes Change: a7c5fb071f614c8ce46b97c5db826303bae8b733 Author: Alessandro Ranellucci Date : 2012-04-09 00:20:51 +0000 Initial commit ================ End of releases. ================ LICENSE000444000765000024 4373312161110664 15407 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15This software is copyright (c) 2013 by Alessandro Ranellucci. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. Terms of the Perl programming language system itself a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or b) the "Artistic License" --- The GNU General Public License, Version 1, February 1989 --- This software is Copyright (c) 2013 by Alessandro Ranellucci. This is free software, licensed under: The GNU General Public License, Version 1, February 1989 GNU GENERAL PUBLIC LICENSE Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too. When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as "you". 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy. 2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. 3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or, c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.) Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system. 4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance. 5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. 7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation. 8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19xx name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (a program to direct compilers to make passes at assemblers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice That's all there is to it! --- The Artistic License 1.0 --- This software is Copyright (c) 2013 by Alessandro Ranellucci. This is free software, licensed under: The Artistic License 1.0 The Artistic License Preamble The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications. Definitions: - "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification. - "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder. - "Copyright Holder" is whoever is named in the copyright or copyrights for the package. - "You" is you, if you're thinking about copying or distributing this Package. - "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.) - "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it. 1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers. 2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version. 3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following: a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package. b) use the modified Package only within your corporation or organization. c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version. d) make other distribution arrangements with the Copyright Holder. 4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following: a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version. b) accompany the distribution with the machine-readable source of the Package with your modifications. c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version. d) make other distribution arrangements with the Copyright Holder. 5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own. 6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package. 7. C or perl subroutines supplied by you and linked into this Package shall not be considered part of this Package. 8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission. 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. The End MANIFEST000444000765000024 47610212161110675 15555 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15Build.PL CHANGES lib/Boost/Geometry/Utils.pm LICENSE MANIFEST This list of files META.json META.yml README src/boost/algorithm/string.hpp src/boost/algorithm/string/case_conv.hpp src/boost/algorithm/string/classification.hpp src/boost/algorithm/string/compare.hpp src/boost/algorithm/string/concept.hpp src/boost/algorithm/string/config.hpp src/boost/algorithm/string/constants.hpp src/boost/algorithm/string/detail/case_conv.hpp src/boost/algorithm/string/detail/classification.hpp src/boost/algorithm/string/detail/find_format.hpp src/boost/algorithm/string/detail/find_format_all.hpp src/boost/algorithm/string/detail/find_format_store.hpp src/boost/algorithm/string/detail/find_iterator.hpp src/boost/algorithm/string/detail/finder.hpp src/boost/algorithm/string/detail/formatter.hpp src/boost/algorithm/string/detail/predicate.hpp src/boost/algorithm/string/detail/replace_storage.hpp src/boost/algorithm/string/detail/sequence.hpp src/boost/algorithm/string/detail/trim.hpp src/boost/algorithm/string/detail/util.hpp src/boost/algorithm/string/erase.hpp src/boost/algorithm/string/find.hpp src/boost/algorithm/string/find_format.hpp src/boost/algorithm/string/find_iterator.hpp src/boost/algorithm/string/finder.hpp src/boost/algorithm/string/formatter.hpp src/boost/algorithm/string/iter_find.hpp src/boost/algorithm/string/join.hpp src/boost/algorithm/string/predicate.hpp src/boost/algorithm/string/predicate_facade.hpp src/boost/algorithm/string/replace.hpp src/boost/algorithm/string/sequence_traits.hpp src/boost/algorithm/string/split.hpp src/boost/algorithm/string/std/list_traits.hpp src/boost/algorithm/string/std/slist_traits.hpp src/boost/algorithm/string/std/string_traits.hpp src/boost/algorithm/string/std_containers_traits.hpp src/boost/algorithm/string/trim.hpp src/boost/algorithm/string/yes_no_type.hpp src/boost/aligned_storage.hpp src/boost/any.hpp src/boost/archive/add_facet.hpp src/boost/archive/archive_exception.hpp src/boost/archive/basic_archive.hpp src/boost/archive/basic_binary_iarchive.hpp src/boost/archive/basic_binary_iprimitive.hpp src/boost/archive/basic_binary_oarchive.hpp src/boost/archive/basic_binary_oprimitive.hpp src/boost/archive/basic_streambuf_locale_saver.hpp src/boost/archive/basic_text_iarchive.hpp src/boost/archive/basic_text_iprimitive.hpp src/boost/archive/basic_text_oarchive.hpp src/boost/archive/basic_text_oprimitive.hpp src/boost/archive/basic_xml_archive.hpp src/boost/archive/basic_xml_iarchive.hpp src/boost/archive/basic_xml_oarchive.hpp src/boost/archive/binary_iarchive.hpp src/boost/archive/binary_iarchive_impl.hpp src/boost/archive/binary_oarchive.hpp src/boost/archive/binary_oarchive_impl.hpp src/boost/archive/binary_wiarchive.hpp src/boost/archive/binary_woarchive.hpp src/boost/archive/codecvt_null.hpp src/boost/archive/detail/abi_prefix.hpp src/boost/archive/detail/abi_suffix.hpp src/boost/archive/detail/archive_serializer_map.hpp src/boost/archive/detail/auto_link_archive.hpp src/boost/archive/detail/auto_link_warchive.hpp src/boost/archive/detail/basic_iarchive.hpp src/boost/archive/detail/basic_iserializer.hpp src/boost/archive/detail/basic_oarchive.hpp src/boost/archive/detail/basic_oserializer.hpp src/boost/archive/detail/basic_pointer_iserializer.hpp src/boost/archive/detail/basic_pointer_oserializer.hpp src/boost/archive/detail/basic_serializer.hpp src/boost/archive/detail/basic_serializer_map.hpp src/boost/archive/detail/check.hpp src/boost/archive/detail/common_iarchive.hpp src/boost/archive/detail/common_oarchive.hpp src/boost/archive/detail/decl.hpp src/boost/archive/detail/interface_iarchive.hpp src/boost/archive/detail/interface_oarchive.hpp src/boost/archive/detail/iserializer.hpp src/boost/archive/detail/oserializer.hpp src/boost/archive/detail/register_archive.hpp src/boost/archive/detail/utf8_codecvt_facet.hpp src/boost/archive/dinkumware.hpp src/boost/archive/impl/archive_serializer_map.ipp src/boost/archive/impl/basic_binary_iarchive.ipp src/boost/archive/impl/basic_binary_iprimitive.ipp src/boost/archive/impl/basic_binary_oarchive.ipp src/boost/archive/impl/basic_binary_oprimitive.ipp src/boost/archive/impl/basic_text_iarchive.ipp src/boost/archive/impl/basic_text_iprimitive.ipp src/boost/archive/impl/basic_text_oarchive.ipp src/boost/archive/impl/basic_text_oprimitive.ipp src/boost/archive/impl/basic_xml_grammar.hpp src/boost/archive/impl/basic_xml_iarchive.ipp src/boost/archive/impl/basic_xml_oarchive.ipp src/boost/archive/impl/text_iarchive_impl.ipp src/boost/archive/impl/text_oarchive_impl.ipp src/boost/archive/impl/text_wiarchive_impl.ipp src/boost/archive/impl/text_woarchive_impl.ipp src/boost/archive/impl/xml_iarchive_impl.ipp src/boost/archive/impl/xml_oarchive_impl.ipp src/boost/archive/impl/xml_wiarchive_impl.ipp src/boost/archive/impl/xml_woarchive_impl.ipp src/boost/archive/iterators/base64_from_binary.hpp src/boost/archive/iterators/binary_from_base64.hpp src/boost/archive/iterators/dataflow_exception.hpp src/boost/archive/iterators/escape.hpp src/boost/archive/iterators/insert_linebreaks.hpp src/boost/archive/iterators/istream_iterator.hpp src/boost/archive/iterators/mb_from_wchar.hpp src/boost/archive/iterators/ostream_iterator.hpp src/boost/archive/iterators/remove_whitespace.hpp src/boost/archive/iterators/transform_width.hpp src/boost/archive/iterators/unescape.hpp src/boost/archive/iterators/wchar_from_mb.hpp src/boost/archive/iterators/xml_escape.hpp src/boost/archive/iterators/xml_unescape.hpp src/boost/archive/polymorphic_iarchive.hpp src/boost/archive/polymorphic_oarchive.hpp src/boost/archive/shared_ptr_helper.hpp src/boost/archive/text_iarchive.hpp src/boost/archive/text_oarchive.hpp src/boost/archive/text_wiarchive.hpp src/boost/archive/text_woarchive.hpp src/boost/archive/wcslen.hpp src/boost/archive/xml_archive_exception.hpp src/boost/archive/xml_iarchive.hpp src/boost/archive/xml_oarchive.hpp src/boost/archive/xml_wiarchive.hpp src/boost/archive/xml_woarchive.hpp src/boost/array.hpp src/boost/assert.hpp src/boost/assign.hpp src/boost/assign/assignment_exception.hpp src/boost/assign/list_inserter.hpp src/boost/assign/list_of.hpp src/boost/assign/std.hpp src/boost/assign/std/deque.hpp src/boost/assign/std/list.hpp src/boost/assign/std/map.hpp src/boost/assign/std/queue.hpp src/boost/assign/std/set.hpp src/boost/assign/std/slist.hpp src/boost/assign/std/stack.hpp src/boost/assign/std/vector.hpp src/boost/bind.hpp src/boost/bind/arg.hpp src/boost/bind/bind.hpp src/boost/bind/bind_cc.hpp src/boost/bind/bind_mf2_cc.hpp src/boost/bind/bind_mf_cc.hpp src/boost/bind/bind_template.hpp src/boost/bind/mem_fn.hpp src/boost/bind/mem_fn_cc.hpp src/boost/bind/mem_fn_template.hpp src/boost/bind/mem_fn_vw.hpp src/boost/bind/placeholders.hpp src/boost/bind/protect.hpp src/boost/bind/storage.hpp src/boost/blank.hpp src/boost/blank_fwd.hpp src/boost/call_traits.hpp src/boost/cast.hpp src/boost/checked_delete.hpp src/boost/compressed_pair.hpp src/boost/concept/assert.hpp src/boost/concept/detail/backward_compatibility.hpp src/boost/concept/detail/borland.hpp src/boost/concept/detail/concept_def.hpp src/boost/concept/detail/concept_undef.hpp src/boost/concept/detail/general.hpp src/boost/concept/detail/has_constraints.hpp src/boost/concept/detail/msvc.hpp src/boost/concept/requires.hpp src/boost/concept/usage.hpp src/boost/concept_archetype.hpp src/boost/concept_check.hpp src/boost/config.hpp src/boost/config/abi/borland_prefix.hpp src/boost/config/abi/borland_suffix.hpp src/boost/config/abi/msvc_prefix.hpp src/boost/config/abi/msvc_suffix.hpp src/boost/config/abi_prefix.hpp src/boost/config/abi_suffix.hpp src/boost/config/auto_link.hpp src/boost/config/compiler/borland.hpp src/boost/config/compiler/clang.hpp src/boost/config/compiler/codegear.hpp src/boost/config/compiler/comeau.hpp src/boost/config/compiler/common_edg.hpp src/boost/config/compiler/compaq_cxx.hpp src/boost/config/compiler/cray.hpp src/boost/config/compiler/digitalmars.hpp src/boost/config/compiler/gcc.hpp src/boost/config/compiler/gcc_xml.hpp src/boost/config/compiler/greenhills.hpp src/boost/config/compiler/hp_acc.hpp src/boost/config/compiler/intel.hpp src/boost/config/compiler/kai.hpp src/boost/config/compiler/metrowerks.hpp src/boost/config/compiler/mpw.hpp src/boost/config/compiler/nvcc.hpp src/boost/config/compiler/pathscale.hpp src/boost/config/compiler/pgi.hpp src/boost/config/compiler/sgi_mipspro.hpp src/boost/config/compiler/sunpro_cc.hpp src/boost/config/compiler/vacpp.hpp src/boost/config/compiler/visualc.hpp src/boost/config/no_tr1/cmath.hpp src/boost/config/no_tr1/complex.hpp src/boost/config/no_tr1/functional.hpp src/boost/config/no_tr1/memory.hpp src/boost/config/no_tr1/utility.hpp src/boost/config/platform/aix.hpp src/boost/config/platform/amigaos.hpp src/boost/config/platform/beos.hpp src/boost/config/platform/bsd.hpp src/boost/config/platform/cray.hpp src/boost/config/platform/cygwin.hpp src/boost/config/platform/hpux.hpp src/boost/config/platform/irix.hpp src/boost/config/platform/linux.hpp src/boost/config/platform/macos.hpp src/boost/config/platform/qnxnto.hpp src/boost/config/platform/solaris.hpp src/boost/config/platform/symbian.hpp src/boost/config/platform/vms.hpp src/boost/config/platform/vxworks.hpp src/boost/config/platform/win32.hpp src/boost/config/posix_features.hpp src/boost/config/requires_threads.hpp src/boost/config/select_compiler_config.hpp src/boost/config/select_platform_config.hpp src/boost/config/select_stdlib_config.hpp src/boost/config/stdlib/dinkumware.hpp src/boost/config/stdlib/libcomo.hpp src/boost/config/stdlib/libcpp.hpp src/boost/config/stdlib/libstdcpp3.hpp src/boost/config/stdlib/modena.hpp src/boost/config/stdlib/msl.hpp src/boost/config/stdlib/roguewave.hpp src/boost/config/stdlib/sgi.hpp src/boost/config/stdlib/stlport.hpp src/boost/config/stdlib/vacpp.hpp src/boost/config/suffix.hpp src/boost/config/user.hpp src/boost/config/warning_disable.hpp src/boost/container/allocator_traits.hpp src/boost/container/container_fwd.hpp src/boost/container/detail/config_begin.hpp src/boost/container/detail/config_end.hpp src/boost/container/detail/memory_util.hpp src/boost/container/detail/mpl.hpp src/boost/container/detail/preprocessor.hpp src/boost/container/detail/workaround.hpp src/boost/cstdint.hpp src/boost/cstdlib.hpp src/boost/current_function.hpp src/boost/detail/allocator_utilities.hpp src/boost/detail/atomic_count.hpp src/boost/detail/binary_search.hpp src/boost/detail/call_traits.hpp src/boost/detail/compressed_pair.hpp src/boost/detail/container_fwd.hpp src/boost/detail/dynamic_bitset.hpp src/boost/detail/endian.hpp src/boost/detail/fenv.hpp src/boost/detail/indirect_traits.hpp src/boost/detail/interlocked.hpp src/boost/detail/is_function_ref_tester.hpp src/boost/detail/is_incrementable.hpp src/boost/detail/is_xxx.hpp src/boost/detail/iterator.hpp src/boost/detail/lcast_precision.hpp src/boost/detail/lightweight_mutex.hpp src/boost/detail/limits.hpp src/boost/detail/no_exceptions_support.hpp src/boost/detail/numeric_traits.hpp src/boost/detail/ob_call_traits.hpp src/boost/detail/ob_compressed_pair.hpp src/boost/detail/quick_allocator.hpp src/boost/detail/reference_content.hpp src/boost/detail/select_type.hpp src/boost/detail/sp_typeinfo.hpp src/boost/detail/templated_streams.hpp src/boost/detail/utf8_codecvt_facet.hpp src/boost/detail/utf8_codecvt_facet.ipp src/boost/detail/workaround.hpp src/boost/dynamic_bitset.hpp src/boost/dynamic_bitset/config.hpp src/boost/dynamic_bitset/dynamic_bitset.hpp src/boost/dynamic_bitset_fwd.hpp src/boost/enable_shared_from_this.hpp src/boost/exception/current_exception_cast.hpp src/boost/exception/detail/attribute_noreturn.hpp src/boost/exception/detail/error_info_impl.hpp src/boost/exception/detail/type_info.hpp src/boost/exception/exception.hpp src/boost/exception/get_error_info.hpp src/boost/foreach.hpp src/boost/foreach_fwd.hpp src/boost/format.hpp src/boost/format/alt_sstream.hpp src/boost/format/alt_sstream_impl.hpp src/boost/format/detail/compat_workarounds.hpp src/boost/format/detail/config_macros.hpp src/boost/format/detail/msvc_disambiguater.hpp src/boost/format/detail/unset_macros.hpp src/boost/format/detail/workarounds_gcc-2_95.hpp src/boost/format/detail/workarounds_stlport.hpp src/boost/format/exceptions.hpp src/boost/format/feed_args.hpp src/boost/format/format_class.hpp src/boost/format/format_fwd.hpp src/boost/format/format_implementation.hpp src/boost/format/free_funcs.hpp src/boost/format/group.hpp src/boost/format/internals.hpp src/boost/format/internals_fwd.hpp src/boost/format/parsing.hpp src/boost/function.hpp src/boost/function/detail/function_iterate.hpp src/boost/function/detail/gen_maybe_include.pl src/boost/function/detail/maybe_include.hpp src/boost/function/detail/prologue.hpp src/boost/function/function0.hpp src/boost/function/function1.hpp src/boost/function/function10.hpp src/boost/function/function2.hpp src/boost/function/function3.hpp src/boost/function/function4.hpp src/boost/function/function5.hpp src/boost/function/function6.hpp src/boost/function/function7.hpp src/boost/function/function8.hpp src/boost/function/function9.hpp src/boost/function/function_base.hpp src/boost/function/function_fwd.hpp src/boost/function/function_template.hpp src/boost/function_equal.hpp src/boost/function_types/components.hpp src/boost/function_types/config/cc_names.hpp src/boost/function_types/config/compiler.hpp src/boost/function_types/config/config.hpp src/boost/function_types/detail/class_transform.hpp src/boost/function_types/detail/classifier.hpp src/boost/function_types/detail/classifier_impl/arity10_0.hpp src/boost/function_types/detail/classifier_impl/arity10_1.hpp src/boost/function_types/detail/classifier_impl/arity20_0.hpp src/boost/function_types/detail/classifier_impl/arity20_1.hpp src/boost/function_types/detail/classifier_impl/arity30_0.hpp src/boost/function_types/detail/classifier_impl/arity30_1.hpp src/boost/function_types/detail/classifier_impl/arity40_0.hpp src/boost/function_types/detail/classifier_impl/arity40_1.hpp src/boost/function_types/detail/classifier_impl/arity50_0.hpp src/boost/function_types/detail/classifier_impl/arity50_1.hpp src/boost/function_types/detail/classifier_impl/master.hpp src/boost/function_types/detail/components_as_mpl_sequence.hpp src/boost/function_types/detail/components_impl/arity10_0.hpp src/boost/function_types/detail/components_impl/arity10_1.hpp src/boost/function_types/detail/components_impl/arity20_0.hpp src/boost/function_types/detail/components_impl/arity20_1.hpp src/boost/function_types/detail/components_impl/arity30_0.hpp src/boost/function_types/detail/components_impl/arity30_1.hpp src/boost/function_types/detail/components_impl/arity40_0.hpp src/boost/function_types/detail/components_impl/arity40_1.hpp src/boost/function_types/detail/components_impl/arity50_0.hpp src/boost/function_types/detail/components_impl/arity50_1.hpp src/boost/function_types/detail/components_impl/master.hpp src/boost/function_types/detail/cv_traits.hpp src/boost/function_types/detail/encoding/aliases_def.hpp src/boost/function_types/detail/encoding/aliases_undef.hpp src/boost/function_types/detail/encoding/def.hpp src/boost/function_types/detail/encoding/undef.hpp src/boost/function_types/detail/pp_arity_loop.hpp src/boost/function_types/detail/pp_cc_loop/master.hpp src/boost/function_types/detail/pp_cc_loop/preprocessed.hpp src/boost/function_types/detail/pp_loop.hpp src/boost/function_types/detail/pp_retag_default_cc/master.hpp src/boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp src/boost/function_types/detail/pp_tags/cc_tag.hpp src/boost/function_types/detail/pp_tags/master.hpp src/boost/function_types/detail/pp_tags/preprocessed.hpp src/boost/function_types/detail/pp_variate_loop/master.hpp src/boost/function_types/detail/pp_variate_loop/preprocessed.hpp src/boost/function_types/detail/retag_default_cc.hpp src/boost/function_types/detail/synthesize.hpp src/boost/function_types/detail/synthesize_impl/arity10_0.hpp src/boost/function_types/detail/synthesize_impl/arity10_1.hpp src/boost/function_types/detail/synthesize_impl/arity20_0.hpp src/boost/function_types/detail/synthesize_impl/arity20_1.hpp src/boost/function_types/detail/synthesize_impl/arity30_0.hpp src/boost/function_types/detail/synthesize_impl/arity30_1.hpp src/boost/function_types/detail/synthesize_impl/arity40_0.hpp src/boost/function_types/detail/synthesize_impl/arity40_1.hpp src/boost/function_types/detail/synthesize_impl/arity50_0.hpp src/boost/function_types/detail/synthesize_impl/arity50_1.hpp src/boost/function_types/detail/synthesize_impl/master.hpp src/boost/function_types/detail/to_sequence.hpp src/boost/function_types/function_arity.hpp src/boost/function_types/is_callable_builtin.hpp src/boost/function_types/is_member_function_pointer.hpp src/boost/function_types/parameter_types.hpp src/boost/function_types/property_tags.hpp src/boost/function_types/result_type.hpp src/boost/functional/hash.hpp src/boost/functional/hash/detail/float_functions.hpp src/boost/functional/hash/detail/hash_float.hpp src/boost/functional/hash/detail/limits.hpp src/boost/functional/hash/extensions.hpp src/boost/functional/hash/hash.hpp src/boost/functional/hash/hash_fwd.hpp src/boost/functional/hash_fwd.hpp src/boost/fusion/adapted/mpl.hpp src/boost/fusion/adapted/mpl/detail/at_impl.hpp src/boost/fusion/adapted/mpl/detail/begin_impl.hpp src/boost/fusion/adapted/mpl/detail/category_of_impl.hpp src/boost/fusion/adapted/mpl/detail/empty_impl.hpp src/boost/fusion/adapted/mpl/detail/end_impl.hpp src/boost/fusion/adapted/mpl/detail/has_key_impl.hpp src/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp src/boost/fusion/adapted/mpl/detail/is_view_impl.hpp src/boost/fusion/adapted/mpl/detail/size_impl.hpp src/boost/fusion/adapted/mpl/detail/value_at_impl.hpp src/boost/fusion/adapted/mpl/mpl_iterator.hpp src/boost/fusion/adapted/std_pair.hpp src/boost/fusion/adapted/struct/adapt_struct.hpp src/boost/fusion/adapted/struct/adapt_struct_named.hpp src/boost/fusion/adapted/struct/detail/adapt_base.hpp src/boost/fusion/adapted/struct/detail/at_impl.hpp src/boost/fusion/adapted/struct/detail/begin_impl.hpp src/boost/fusion/adapted/struct/detail/category_of_impl.hpp src/boost/fusion/adapted/struct/detail/deref_impl.hpp src/boost/fusion/adapted/struct/detail/end_impl.hpp src/boost/fusion/adapted/struct/detail/extension.hpp src/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp src/boost/fusion/adapted/struct/detail/is_view_impl.hpp src/boost/fusion/adapted/struct/detail/namespace.hpp src/boost/fusion/adapted/struct/detail/proxy_type.hpp src/boost/fusion/adapted/struct/detail/size_impl.hpp src/boost/fusion/adapted/struct/detail/value_at_impl.hpp src/boost/fusion/adapted/struct/detail/value_of_impl.hpp src/boost/fusion/algorithm/query/detail/find_if.hpp src/boost/fusion/algorithm/query/detail/segmented_find.hpp src/boost/fusion/algorithm/query/find.hpp src/boost/fusion/algorithm/query/find_fwd.hpp src/boost/fusion/algorithm/query/find_if_fwd.hpp src/boost/fusion/algorithm/transformation/erase.hpp src/boost/fusion/algorithm/transformation/erase_key.hpp src/boost/fusion/algorithm/transformation/insert.hpp src/boost/fusion/algorithm/transformation/insert_range.hpp src/boost/fusion/algorithm/transformation/pop_back.hpp src/boost/fusion/algorithm/transformation/pop_front.hpp src/boost/fusion/algorithm/transformation/push_back.hpp src/boost/fusion/algorithm/transformation/push_front.hpp src/boost/fusion/container/deque/deque_fwd.hpp src/boost/fusion/container/deque/detail/pp_deque_fwd.hpp src/boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp src/boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp src/boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp src/boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp src/boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp src/boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp src/boost/fusion/container/deque/limits.hpp src/boost/fusion/container/generation/ignore.hpp src/boost/fusion/container/list/cons.hpp src/boost/fusion/container/list/cons_fwd.hpp src/boost/fusion/container/list/cons_iterator.hpp src/boost/fusion/container/list/detail/at_impl.hpp src/boost/fusion/container/list/detail/begin_impl.hpp src/boost/fusion/container/list/detail/deref_impl.hpp src/boost/fusion/container/list/detail/empty_impl.hpp src/boost/fusion/container/list/detail/end_impl.hpp src/boost/fusion/container/list/detail/equal_to_impl.hpp src/boost/fusion/container/list/detail/next_impl.hpp src/boost/fusion/container/list/detail/preprocessed/list10_fwd.hpp src/boost/fusion/container/list/detail/preprocessed/list20_fwd.hpp src/boost/fusion/container/list/detail/preprocessed/list30_fwd.hpp src/boost/fusion/container/list/detail/preprocessed/list40_fwd.hpp src/boost/fusion/container/list/detail/preprocessed/list50_fwd.hpp src/boost/fusion/container/list/detail/preprocessed/list_fwd.hpp src/boost/fusion/container/list/detail/reverse_cons.hpp src/boost/fusion/container/list/detail/value_at_impl.hpp src/boost/fusion/container/list/detail/value_of_impl.hpp src/boost/fusion/container/list/limits.hpp src/boost/fusion/container/list/list_fwd.hpp src/boost/fusion/container/map/detail/preprocessed/map10_fwd.hpp src/boost/fusion/container/map/detail/preprocessed/map20_fwd.hpp src/boost/fusion/container/map/detail/preprocessed/map30_fwd.hpp src/boost/fusion/container/map/detail/preprocessed/map40_fwd.hpp src/boost/fusion/container/map/detail/preprocessed/map50_fwd.hpp src/boost/fusion/container/map/detail/preprocessed/map_fwd.hpp src/boost/fusion/container/map/limits.hpp src/boost/fusion/container/map/map_fwd.hpp src/boost/fusion/container/set/detail/preprocessed/set10_fwd.hpp src/boost/fusion/container/set/detail/preprocessed/set20_fwd.hpp src/boost/fusion/container/set/detail/preprocessed/set30_fwd.hpp src/boost/fusion/container/set/detail/preprocessed/set40_fwd.hpp src/boost/fusion/container/set/detail/preprocessed/set50_fwd.hpp src/boost/fusion/container/set/detail/preprocessed/set_fwd.hpp src/boost/fusion/container/set/limits.hpp src/boost/fusion/container/set/set_fwd.hpp src/boost/fusion/container/vector/detail/advance_impl.hpp src/boost/fusion/container/vector/detail/at_impl.hpp src/boost/fusion/container/vector/detail/begin_impl.hpp src/boost/fusion/container/vector/detail/deref_impl.hpp src/boost/fusion/container/vector/detail/distance_impl.hpp src/boost/fusion/container/vector/detail/end_impl.hpp src/boost/fusion/container/vector/detail/equal_to_impl.hpp src/boost/fusion/container/vector/detail/next_impl.hpp src/boost/fusion/container/vector/detail/preprocessed/vector.hpp src/boost/fusion/container/vector/detail/preprocessed/vector10.hpp src/boost/fusion/container/vector/detail/preprocessed/vector10_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vector20.hpp src/boost/fusion/container/vector/detail/preprocessed/vector20_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vector30.hpp src/boost/fusion/container/vector/detail/preprocessed/vector30_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vector40.hpp src/boost/fusion/container/vector/detail/preprocessed/vector40_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vector50.hpp src/boost/fusion/container/vector/detail/preprocessed/vector50_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vector_chooser.hpp src/boost/fusion/container/vector/detail/preprocessed/vector_chooser10.hpp src/boost/fusion/container/vector/detail/preprocessed/vector_chooser20.hpp src/boost/fusion/container/vector/detail/preprocessed/vector_chooser30.hpp src/boost/fusion/container/vector/detail/preprocessed/vector_chooser40.hpp src/boost/fusion/container/vector/detail/preprocessed/vector_chooser50.hpp src/boost/fusion/container/vector/detail/preprocessed/vector_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector10_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector20_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector30_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector40_fwd.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp src/boost/fusion/container/vector/detail/preprocessed/vvector50_fwd.hpp src/boost/fusion/container/vector/detail/prior_impl.hpp src/boost/fusion/container/vector/detail/value_at_impl.hpp src/boost/fusion/container/vector/detail/value_of_impl.hpp src/boost/fusion/container/vector/detail/vector_forward_ctor.hpp src/boost/fusion/container/vector/detail/vector_n.hpp src/boost/fusion/container/vector/detail/vector_n_chooser.hpp src/boost/fusion/container/vector/limits.hpp src/boost/fusion/container/vector/vector.hpp src/boost/fusion/container/vector/vector10.hpp src/boost/fusion/container/vector/vector10_fwd.hpp src/boost/fusion/container/vector/vector20.hpp src/boost/fusion/container/vector/vector20_fwd.hpp src/boost/fusion/container/vector/vector30.hpp src/boost/fusion/container/vector/vector30_fwd.hpp src/boost/fusion/container/vector/vector40.hpp src/boost/fusion/container/vector/vector40_fwd.hpp src/boost/fusion/container/vector/vector50.hpp src/boost/fusion/container/vector/vector50_fwd.hpp src/boost/fusion/container/vector/vector_fwd.hpp src/boost/fusion/container/vector/vector_iterator.hpp src/boost/fusion/include/adapt_struct_named.hpp src/boost/fusion/include/at.hpp src/boost/fusion/include/front.hpp src/boost/fusion/include/is_sequence.hpp src/boost/fusion/include/size.hpp src/boost/fusion/include/std_pair.hpp src/boost/fusion/include/tag_of.hpp src/boost/fusion/include/tuple.hpp src/boost/fusion/iterator/advance.hpp src/boost/fusion/iterator/basic_iterator.hpp src/boost/fusion/iterator/deref.hpp src/boost/fusion/iterator/deref_data.hpp src/boost/fusion/iterator/detail/adapt_deref_traits.hpp src/boost/fusion/iterator/detail/adapt_value_traits.hpp src/boost/fusion/iterator/detail/advance.hpp src/boost/fusion/iterator/detail/distance.hpp src/boost/fusion/iterator/detail/segment_sequence.hpp src/boost/fusion/iterator/detail/segmented_equal_to.hpp src/boost/fusion/iterator/detail/segmented_iterator.hpp src/boost/fusion/iterator/detail/segmented_next_impl.hpp src/boost/fusion/iterator/distance.hpp src/boost/fusion/iterator/equal_to.hpp src/boost/fusion/iterator/iterator_adapter.hpp src/boost/fusion/iterator/iterator_facade.hpp src/boost/fusion/iterator/key_of.hpp src/boost/fusion/iterator/mpl.hpp src/boost/fusion/iterator/mpl/convert_iterator.hpp src/boost/fusion/iterator/mpl/fusion_iterator.hpp src/boost/fusion/iterator/next.hpp src/boost/fusion/iterator/prior.hpp src/boost/fusion/iterator/segmented_iterator.hpp src/boost/fusion/iterator/value_of.hpp src/boost/fusion/iterator/value_of_data.hpp src/boost/fusion/mpl.hpp src/boost/fusion/mpl/at.hpp src/boost/fusion/mpl/back.hpp src/boost/fusion/mpl/begin.hpp src/boost/fusion/mpl/clear.hpp src/boost/fusion/mpl/detail/clear.hpp src/boost/fusion/mpl/empty.hpp src/boost/fusion/mpl/end.hpp src/boost/fusion/mpl/erase.hpp src/boost/fusion/mpl/erase_key.hpp src/boost/fusion/mpl/front.hpp src/boost/fusion/mpl/has_key.hpp src/boost/fusion/mpl/insert.hpp src/boost/fusion/mpl/insert_range.hpp src/boost/fusion/mpl/pop_back.hpp src/boost/fusion/mpl/pop_front.hpp src/boost/fusion/mpl/push_back.hpp src/boost/fusion/mpl/push_front.hpp src/boost/fusion/mpl/size.hpp src/boost/fusion/sequence/comparison.hpp src/boost/fusion/sequence/comparison/detail/equal_to.hpp src/boost/fusion/sequence/comparison/detail/greater.hpp src/boost/fusion/sequence/comparison/detail/greater_equal.hpp src/boost/fusion/sequence/comparison/detail/less.hpp src/boost/fusion/sequence/comparison/detail/less_equal.hpp src/boost/fusion/sequence/comparison/detail/not_equal_to.hpp src/boost/fusion/sequence/comparison/enable_comparison.hpp src/boost/fusion/sequence/comparison/equal_to.hpp src/boost/fusion/sequence/comparison/greater.hpp src/boost/fusion/sequence/comparison/greater_equal.hpp src/boost/fusion/sequence/comparison/less.hpp src/boost/fusion/sequence/comparison/less_equal.hpp src/boost/fusion/sequence/comparison/not_equal_to.hpp src/boost/fusion/sequence/convert.hpp src/boost/fusion/sequence/intrinsic/at.hpp src/boost/fusion/sequence/intrinsic/begin.hpp src/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp src/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp src/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp src/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp src/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp src/boost/fusion/sequence/intrinsic/empty.hpp src/boost/fusion/sequence/intrinsic/end.hpp src/boost/fusion/sequence/intrinsic/front.hpp src/boost/fusion/sequence/intrinsic/has_key.hpp src/boost/fusion/sequence/intrinsic/segments.hpp src/boost/fusion/sequence/intrinsic/size.hpp src/boost/fusion/sequence/intrinsic/value_at.hpp src/boost/fusion/sequence/intrinsic_fwd.hpp src/boost/fusion/sequence/io.hpp src/boost/fusion/sequence/io/detail/in.hpp src/boost/fusion/sequence/io/detail/manip.hpp src/boost/fusion/sequence/io/detail/out.hpp src/boost/fusion/sequence/io/in.hpp src/boost/fusion/sequence/io/out.hpp src/boost/fusion/support/as_const.hpp src/boost/fusion/support/category_of.hpp src/boost/fusion/support/detail/access.hpp src/boost/fusion/support/detail/as_fusion_element.hpp src/boost/fusion/support/detail/category_of.hpp src/boost/fusion/support/detail/is_mpl_sequence.hpp src/boost/fusion/support/detail/is_view.hpp src/boost/fusion/support/detail/mpl_iterator_category.hpp src/boost/fusion/support/detail/pp_round.hpp src/boost/fusion/support/detail/segmented_fold_until_impl.hpp src/boost/fusion/support/is_iterator.hpp src/boost/fusion/support/is_segmented.hpp src/boost/fusion/support/is_sequence.hpp src/boost/fusion/support/is_view.hpp src/boost/fusion/support/iterator_base.hpp src/boost/fusion/support/segmented_fold_until.hpp src/boost/fusion/support/sequence_base.hpp src/boost/fusion/support/tag_of.hpp src/boost/fusion/support/tag_of_fwd.hpp src/boost/fusion/support/void.hpp src/boost/fusion/tuple.hpp src/boost/fusion/tuple/detail/preprocessed/make_tuple.hpp src/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp src/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp src/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp src/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp src/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp src/boost/fusion/tuple/detail/preprocessed/tuple.hpp src/boost/fusion/tuple/detail/preprocessed/tuple10.hpp src/boost/fusion/tuple/detail/preprocessed/tuple10_fwd.hpp src/boost/fusion/tuple/detail/preprocessed/tuple20.hpp src/boost/fusion/tuple/detail/preprocessed/tuple20_fwd.hpp src/boost/fusion/tuple/detail/preprocessed/tuple30.hpp src/boost/fusion/tuple/detail/preprocessed/tuple30_fwd.hpp src/boost/fusion/tuple/detail/preprocessed/tuple40.hpp src/boost/fusion/tuple/detail/preprocessed/tuple40_fwd.hpp src/boost/fusion/tuple/detail/preprocessed/tuple50.hpp src/boost/fusion/tuple/detail/preprocessed/tuple50_fwd.hpp src/boost/fusion/tuple/detail/preprocessed/tuple_fwd.hpp src/boost/fusion/tuple/detail/preprocessed/tuple_tie.hpp src/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp src/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp src/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp src/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp src/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp src/boost/fusion/tuple/detail/tuple_expand.hpp src/boost/fusion/tuple/make_tuple.hpp src/boost/fusion/tuple/tuple.hpp src/boost/fusion/tuple/tuple_fwd.hpp src/boost/fusion/tuple/tuple_tie.hpp src/boost/fusion/view/iterator_range.hpp src/boost/fusion/view/iterator_range/detail/at_impl.hpp src/boost/fusion/view/iterator_range/detail/begin_impl.hpp src/boost/fusion/view/iterator_range/detail/end_impl.hpp src/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp src/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp src/boost/fusion/view/iterator_range/detail/segments_impl.hpp src/boost/fusion/view/iterator_range/detail/size_impl.hpp src/boost/fusion/view/iterator_range/detail/value_at_impl.hpp src/boost/fusion/view/iterator_range/iterator_range.hpp src/boost/fusion/view/joint_view/detail/begin_impl.hpp src/boost/fusion/view/joint_view/detail/deref_data_impl.hpp src/boost/fusion/view/joint_view/detail/deref_impl.hpp src/boost/fusion/view/joint_view/detail/end_impl.hpp src/boost/fusion/view/joint_view/detail/key_of_impl.hpp src/boost/fusion/view/joint_view/detail/next_impl.hpp src/boost/fusion/view/joint_view/detail/value_of_data_impl.hpp src/boost/fusion/view/joint_view/detail/value_of_impl.hpp src/boost/fusion/view/joint_view/joint_view.hpp src/boost/fusion/view/joint_view/joint_view_fwd.hpp src/boost/fusion/view/joint_view/joint_view_iterator.hpp src/boost/fusion/view/single_view/detail/advance_impl.hpp src/boost/fusion/view/single_view/detail/at_impl.hpp src/boost/fusion/view/single_view/detail/begin_impl.hpp src/boost/fusion/view/single_view/detail/deref_impl.hpp src/boost/fusion/view/single_view/detail/distance_impl.hpp src/boost/fusion/view/single_view/detail/end_impl.hpp src/boost/fusion/view/single_view/detail/equal_to_impl.hpp src/boost/fusion/view/single_view/detail/next_impl.hpp src/boost/fusion/view/single_view/detail/prior_impl.hpp src/boost/fusion/view/single_view/detail/size_impl.hpp src/boost/fusion/view/single_view/detail/value_at_impl.hpp src/boost/fusion/view/single_view/detail/value_of_impl.hpp src/boost/fusion/view/single_view/single_view.hpp src/boost/fusion/view/single_view/single_view_iterator.hpp src/boost/geometry.hpp src/boost/geometry/algorithms/append.hpp src/boost/geometry/algorithms/area.hpp src/boost/geometry/algorithms/assign.hpp src/boost/geometry/algorithms/buffer.hpp src/boost/geometry/algorithms/centroid.hpp src/boost/geometry/algorithms/clear.hpp src/boost/geometry/algorithms/comparable_distance.hpp src/boost/geometry/algorithms/convert.hpp src/boost/geometry/algorithms/convex_hull.hpp src/boost/geometry/algorithms/correct.hpp src/boost/geometry/algorithms/covered_by.hpp src/boost/geometry/algorithms/detail/as_range.hpp src/boost/geometry/algorithms/detail/assign_box_corners.hpp src/boost/geometry/algorithms/detail/assign_indexed_point.hpp src/boost/geometry/algorithms/detail/assign_values.hpp src/boost/geometry/algorithms/detail/calculate_null.hpp src/boost/geometry/algorithms/detail/calculate_sum.hpp src/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp src/boost/geometry/algorithms/detail/convert_point_to_point.hpp src/boost/geometry/algorithms/detail/disjoint.hpp src/boost/geometry/algorithms/detail/equals/collect_vectors.hpp src/boost/geometry/algorithms/detail/for_each_range.hpp src/boost/geometry/algorithms/detail/get_left_turns.hpp src/boost/geometry/algorithms/detail/has_self_intersections.hpp src/boost/geometry/algorithms/detail/not.hpp src/boost/geometry/algorithms/detail/occupation_info.hpp src/boost/geometry/algorithms/detail/overlay/add_rings.hpp src/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp src/boost/geometry/algorithms/detail/overlay/assign_parents.hpp src/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp src/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp src/boost/geometry/algorithms/detail/overlay/check_enrich.hpp src/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp src/boost/geometry/algorithms/detail/overlay/convert_ring.hpp src/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp src/boost/geometry/algorithms/detail/overlay/copy_segments.hpp src/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp src/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp src/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp src/boost/geometry/algorithms/detail/overlay/follow.hpp src/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp src/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp src/boost/geometry/algorithms/detail/overlay/get_ring.hpp src/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp src/boost/geometry/algorithms/detail/overlay/get_turns.hpp src/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp src/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp src/boost/geometry/algorithms/detail/overlay/overlay.hpp src/boost/geometry/algorithms/detail/overlay/overlay_type.hpp src/boost/geometry/algorithms/detail/overlay/ring_properties.hpp src/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp src/boost/geometry/algorithms/detail/overlay/select_rings.hpp src/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp src/boost/geometry/algorithms/detail/overlay/stream_info.hpp src/boost/geometry/algorithms/detail/overlay/traversal_info.hpp src/boost/geometry/algorithms/detail/overlay/traverse.hpp src/boost/geometry/algorithms/detail/overlay/turn_info.hpp src/boost/geometry/algorithms/detail/overlay/visit_info.hpp src/boost/geometry/algorithms/detail/partition.hpp src/boost/geometry/algorithms/detail/point_on_border.hpp src/boost/geometry/algorithms/detail/ring_identifier.hpp src/boost/geometry/algorithms/detail/sections/range_by_section.hpp src/boost/geometry/algorithms/detail/sections/sectionalize.hpp src/boost/geometry/algorithms/detail/throw_on_empty_input.hpp src/boost/geometry/algorithms/difference.hpp src/boost/geometry/algorithms/disjoint.hpp src/boost/geometry/algorithms/distance.hpp src/boost/geometry/algorithms/envelope.hpp src/boost/geometry/algorithms/equals.hpp src/boost/geometry/algorithms/expand.hpp src/boost/geometry/algorithms/for_each.hpp src/boost/geometry/algorithms/intersection.hpp src/boost/geometry/algorithms/intersects.hpp src/boost/geometry/algorithms/length.hpp src/boost/geometry/algorithms/make.hpp src/boost/geometry/algorithms/not_implemented.hpp src/boost/geometry/algorithms/num_geometries.hpp src/boost/geometry/algorithms/num_interior_rings.hpp src/boost/geometry/algorithms/num_points.hpp src/boost/geometry/algorithms/overlaps.hpp src/boost/geometry/algorithms/perimeter.hpp src/boost/geometry/algorithms/reverse.hpp src/boost/geometry/algorithms/simplify.hpp src/boost/geometry/algorithms/sym_difference.hpp src/boost/geometry/algorithms/touches.hpp src/boost/geometry/algorithms/transform.hpp src/boost/geometry/algorithms/union.hpp src/boost/geometry/algorithms/unique.hpp src/boost/geometry/algorithms/within.hpp src/boost/geometry/arithmetic/arithmetic.hpp src/boost/geometry/arithmetic/determinant.hpp src/boost/geometry/arithmetic/dot_product.hpp src/boost/geometry/core/access.hpp src/boost/geometry/core/closure.hpp src/boost/geometry/core/coordinate_dimension.hpp src/boost/geometry/core/coordinate_system.hpp src/boost/geometry/core/coordinate_type.hpp src/boost/geometry/core/cs.hpp src/boost/geometry/core/exception.hpp src/boost/geometry/core/exterior_ring.hpp src/boost/geometry/core/geometry_id.hpp src/boost/geometry/core/interior_rings.hpp src/boost/geometry/core/interior_type.hpp src/boost/geometry/core/is_areal.hpp src/boost/geometry/core/mutable_range.hpp src/boost/geometry/core/point_order.hpp src/boost/geometry/core/point_type.hpp src/boost/geometry/core/radian_access.hpp src/boost/geometry/core/reverse_dispatch.hpp src/boost/geometry/core/ring_type.hpp src/boost/geometry/core/tag.hpp src/boost/geometry/core/tag_cast.hpp src/boost/geometry/core/tags.hpp src/boost/geometry/core/topological_dimension.hpp src/boost/geometry/geometries/adapted/boost_array.hpp src/boost/geometry/geometries/adapted/boost_fusion.hpp src/boost/geometry/geometries/adapted/boost_polygon.hpp src/boost/geometry/geometries/adapted/boost_polygon/box.hpp src/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp src/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp src/boost/geometry/geometries/adapted/boost_polygon/point.hpp src/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp src/boost/geometry/geometries/adapted/boost_polygon/ring.hpp src/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp src/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp src/boost/geometry/geometries/adapted/boost_range/filtered.hpp src/boost/geometry/geometries/adapted/boost_range/reversed.hpp src/boost/geometry/geometries/adapted/boost_range/sliced.hpp src/boost/geometry/geometries/adapted/boost_range/strided.hpp src/boost/geometry/geometries/adapted/boost_range/uniqued.hpp src/boost/geometry/geometries/adapted/boost_tuple.hpp src/boost/geometry/geometries/adapted/c_array.hpp src/boost/geometry/geometries/adapted/std_pair_as_segment.hpp src/boost/geometry/geometries/box.hpp src/boost/geometry/geometries/concepts/box_concept.hpp src/boost/geometry/geometries/concepts/check.hpp src/boost/geometry/geometries/concepts/linestring_concept.hpp src/boost/geometry/geometries/concepts/point_concept.hpp src/boost/geometry/geometries/concepts/polygon_concept.hpp src/boost/geometry/geometries/concepts/ring_concept.hpp src/boost/geometry/geometries/concepts/segment_concept.hpp src/boost/geometry/geometries/geometries.hpp src/boost/geometry/geometries/linestring.hpp src/boost/geometry/geometries/point.hpp src/boost/geometry/geometries/point_xy.hpp src/boost/geometry/geometries/polygon.hpp src/boost/geometry/geometries/register/box.hpp src/boost/geometry/geometries/register/linestring.hpp src/boost/geometry/geometries/register/point.hpp src/boost/geometry/geometries/register/ring.hpp src/boost/geometry/geometries/register/segment.hpp src/boost/geometry/geometries/ring.hpp src/boost/geometry/geometries/segment.hpp src/boost/geometry/geometries/variant.hpp src/boost/geometry/geometry.hpp src/boost/geometry/io/dsv/write.hpp src/boost/geometry/io/io.hpp src/boost/geometry/io/wkt/detail/prefix.hpp src/boost/geometry/io/wkt/detail/wkt_multi.hpp src/boost/geometry/io/wkt/read.hpp src/boost/geometry/io/wkt/stream.hpp src/boost/geometry/io/wkt/wkt.hpp src/boost/geometry/io/wkt/write.hpp src/boost/geometry/iterators/base.hpp src/boost/geometry/iterators/closing_iterator.hpp src/boost/geometry/iterators/ever_circling_iterator.hpp src/boost/geometry/multi/algorithms/append.hpp src/boost/geometry/multi/algorithms/area.hpp src/boost/geometry/multi/algorithms/centroid.hpp src/boost/geometry/multi/algorithms/clear.hpp src/boost/geometry/multi/algorithms/convert.hpp src/boost/geometry/multi/algorithms/correct.hpp src/boost/geometry/multi/algorithms/covered_by.hpp src/boost/geometry/multi/algorithms/detail/for_each_range.hpp src/boost/geometry/multi/algorithms/detail/modify.hpp src/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp src/boost/geometry/multi/algorithms/detail/multi_sum.hpp src/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp src/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp src/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp src/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp src/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp src/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp src/boost/geometry/multi/algorithms/detail/point_on_border.hpp src/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp src/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp src/boost/geometry/multi/algorithms/disjoint.hpp src/boost/geometry/multi/algorithms/distance.hpp src/boost/geometry/multi/algorithms/envelope.hpp src/boost/geometry/multi/algorithms/equals.hpp src/boost/geometry/multi/algorithms/for_each.hpp src/boost/geometry/multi/algorithms/intersection.hpp src/boost/geometry/multi/algorithms/length.hpp src/boost/geometry/multi/algorithms/num_geometries.hpp src/boost/geometry/multi/algorithms/num_interior_rings.hpp src/boost/geometry/multi/algorithms/num_points.hpp src/boost/geometry/multi/algorithms/perimeter.hpp src/boost/geometry/multi/algorithms/reverse.hpp src/boost/geometry/multi/algorithms/simplify.hpp src/boost/geometry/multi/algorithms/transform.hpp src/boost/geometry/multi/algorithms/unique.hpp src/boost/geometry/multi/algorithms/within.hpp src/boost/geometry/multi/core/closure.hpp src/boost/geometry/multi/core/geometry_id.hpp src/boost/geometry/multi/core/interior_rings.hpp src/boost/geometry/multi/core/is_areal.hpp src/boost/geometry/multi/core/point_order.hpp src/boost/geometry/multi/core/point_type.hpp src/boost/geometry/multi/core/ring_type.hpp src/boost/geometry/multi/core/tags.hpp src/boost/geometry/multi/core/topological_dimension.hpp src/boost/geometry/multi/geometries/concepts/check.hpp src/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp src/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp src/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp src/boost/geometry/multi/geometries/multi_geometries.hpp src/boost/geometry/multi/geometries/multi_linestring.hpp src/boost/geometry/multi/geometries/multi_point.hpp src/boost/geometry/multi/geometries/multi_polygon.hpp src/boost/geometry/multi/geometries/register/multi_linestring.hpp src/boost/geometry/multi/geometries/register/multi_point.hpp src/boost/geometry/multi/geometries/register/multi_polygon.hpp src/boost/geometry/multi/io/dsv/write.hpp src/boost/geometry/multi/io/wkt/detail/prefix.hpp src/boost/geometry/multi/io/wkt/read.hpp src/boost/geometry/multi/io/wkt/wkt.hpp src/boost/geometry/multi/io/wkt/write.hpp src/boost/geometry/multi/multi.hpp src/boost/geometry/multi/strategies/cartesian/centroid_average.hpp src/boost/geometry/multi/views/detail/range_type.hpp src/boost/geometry/policies/compare.hpp src/boost/geometry/policies/relate/de9im.hpp src/boost/geometry/policies/relate/direction.hpp src/boost/geometry/policies/relate/intersection_points.hpp src/boost/geometry/policies/relate/tupled.hpp src/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp src/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp src/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp src/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp src/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp src/boost/geometry/strategies/area.hpp src/boost/geometry/strategies/cartesian/area_surveyor.hpp src/boost/geometry/strategies/cartesian/box_in_box.hpp src/boost/geometry/strategies/cartesian/cart_intersect.hpp src/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp src/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp src/boost/geometry/strategies/cartesian/distance_projected_point.hpp src/boost/geometry/strategies/cartesian/distance_pythagoras.hpp src/boost/geometry/strategies/cartesian/point_in_box.hpp src/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp src/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp src/boost/geometry/strategies/cartesian/side_by_triangle.hpp src/boost/geometry/strategies/centroid.hpp src/boost/geometry/strategies/compare.hpp src/boost/geometry/strategies/concepts/area_concept.hpp src/boost/geometry/strategies/concepts/centroid_concept.hpp src/boost/geometry/strategies/concepts/convex_hull_concept.hpp src/boost/geometry/strategies/concepts/distance_concept.hpp src/boost/geometry/strategies/concepts/segment_intersect_concept.hpp src/boost/geometry/strategies/concepts/simplify_concept.hpp src/boost/geometry/strategies/concepts/within_concept.hpp src/boost/geometry/strategies/convex_hull.hpp src/boost/geometry/strategies/covered_by.hpp src/boost/geometry/strategies/default_area_result.hpp src/boost/geometry/strategies/default_distance_result.hpp src/boost/geometry/strategies/default_length_result.hpp src/boost/geometry/strategies/distance.hpp src/boost/geometry/strategies/intersection.hpp src/boost/geometry/strategies/intersection_result.hpp src/boost/geometry/strategies/side.hpp src/boost/geometry/strategies/side_info.hpp src/boost/geometry/strategies/spherical/area_huiller.hpp src/boost/geometry/strategies/spherical/compare_circular.hpp src/boost/geometry/strategies/spherical/distance_cross_track.hpp src/boost/geometry/strategies/spherical/distance_haversine.hpp src/boost/geometry/strategies/spherical/side_by_cross_track.hpp src/boost/geometry/strategies/spherical/ssf.hpp src/boost/geometry/strategies/strategies.hpp src/boost/geometry/strategies/strategy_transform.hpp src/boost/geometry/strategies/tags.hpp src/boost/geometry/strategies/transform.hpp src/boost/geometry/strategies/transform/inverse_transformer.hpp src/boost/geometry/strategies/transform/map_transformer.hpp src/boost/geometry/strategies/transform/matrix_transformers.hpp src/boost/geometry/strategies/within.hpp src/boost/geometry/util/add_const_if_c.hpp src/boost/geometry/util/bare_type.hpp src/boost/geometry/util/calculation_type.hpp src/boost/geometry/util/closure_as_bool.hpp src/boost/geometry/util/coordinate_cast.hpp src/boost/geometry/util/for_each_coordinate.hpp src/boost/geometry/util/math.hpp src/boost/geometry/util/order_as_direction.hpp src/boost/geometry/util/parameter_type_of.hpp src/boost/geometry/util/promote_floating_point.hpp src/boost/geometry/util/rational.hpp src/boost/geometry/util/readme.txt src/boost/geometry/util/select_calculation_type.hpp src/boost/geometry/util/select_coordinate_type.hpp src/boost/geometry/util/select_most_precise.hpp src/boost/geometry/views/box_view.hpp src/boost/geometry/views/closeable_view.hpp src/boost/geometry/views/detail/points_view.hpp src/boost/geometry/views/detail/range_type.hpp src/boost/geometry/views/identity_view.hpp src/boost/geometry/views/reversible_view.hpp src/boost/geometry/views/segment_view.hpp src/boost/get_pointer.hpp src/boost/graph/accounting.hpp src/boost/graph/adjacency_iterator.hpp src/boost/graph/adjacency_list.hpp src/boost/graph/breadth_first_search.hpp src/boost/graph/buffer_concepts.hpp src/boost/graph/detail/adj_list_edge_iterator.hpp src/boost/graph/detail/adjacency_list.hpp src/boost/graph/detail/array_binary_tree.hpp src/boost/graph/detail/d_ary_heap.hpp src/boost/graph/detail/edge.hpp src/boost/graph/dijkstra_shortest_paths.hpp src/boost/graph/distributed/breadth_first_search.hpp src/boost/graph/distributed/concepts.hpp src/boost/graph/distributed/crauser_et_al_shortest_paths.hpp src/boost/graph/distributed/detail/dijkstra_shortest_paths.hpp src/boost/graph/distributed/detail/filtered_queue.hpp src/boost/graph/distributed/detail/queue.ipp src/boost/graph/distributed/detail/remote_update_set.hpp src/boost/graph/distributed/dijkstra_shortest_paths.hpp src/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp src/boost/graph/distributed/queue.hpp src/boost/graph/distributed/two_bit_color_map.hpp src/boost/graph/distributed/unsafe_serialize.hpp src/boost/graph/exception.hpp src/boost/graph/graph_concepts.hpp src/boost/graph/graph_mutability_traits.hpp src/boost/graph/graph_selectors.hpp src/boost/graph/graph_traits.hpp src/boost/graph/iteration_macros.hpp src/boost/graph/named_function_params.hpp src/boost/graph/named_graph.hpp src/boost/graph/numeric_values.hpp src/boost/graph/overloading.hpp src/boost/graph/parallel/algorithm.hpp src/boost/graph/parallel/basic_reduce.hpp src/boost/graph/parallel/container_traits.hpp src/boost/graph/parallel/detail/inplace_all_to_all.hpp src/boost/graph/parallel/detail/untracked_pair.hpp src/boost/graph/parallel/process_group.hpp src/boost/graph/parallel/properties.hpp src/boost/graph/parallel/simple_trigger.hpp src/boost/graph/properties.hpp src/boost/graph/property_maps/constant_property_map.hpp src/boost/graph/property_maps/null_property_map.hpp src/boost/graph/relax.hpp src/boost/graph/reverse_graph.hpp src/boost/graph/two_bit_color_map.hpp src/boost/graph/visitors.hpp src/boost/implicit_cast.hpp src/boost/integer.hpp src/boost/integer/integer_mask.hpp src/boost/integer/static_log2.hpp src/boost/integer_fwd.hpp src/boost/integer_traits.hpp src/boost/intrusive/detail/config_begin.hpp src/boost/intrusive/detail/config_end.hpp src/boost/intrusive/detail/has_member_function_callable_with.hpp src/boost/intrusive/detail/memory_util.hpp src/boost/intrusive/detail/mpl.hpp src/boost/intrusive/detail/preprocessor.hpp src/boost/intrusive/detail/workaround.hpp src/boost/intrusive/pointer_traits.hpp src/boost/intrusive_ptr.hpp src/boost/io/ios_state.hpp src/boost/io_fwd.hpp src/boost/is_placeholder.hpp src/boost/iterator.hpp src/boost/iterator/counting_iterator.hpp src/boost/iterator/detail/config_def.hpp src/boost/iterator/detail/config_undef.hpp src/boost/iterator/detail/enable_if.hpp src/boost/iterator/detail/facade_iterator_category.hpp src/boost/iterator/detail/minimum_category.hpp src/boost/iterator/filter_iterator.hpp src/boost/iterator/interoperable.hpp src/boost/iterator/iterator_adaptor.hpp src/boost/iterator/iterator_categories.hpp src/boost/iterator/iterator_concepts.hpp src/boost/iterator/iterator_facade.hpp src/boost/iterator/iterator_traits.hpp src/boost/iterator/reverse_iterator.hpp src/boost/iterator/transform_iterator.hpp src/boost/lexical_cast.hpp src/boost/limits.hpp src/boost/make_shared.hpp src/boost/math/common_factor_ct.hpp src/boost/math/common_factor_rt.hpp src/boost/math/constants/calculate_constants.hpp src/boost/math/constants/constants.hpp src/boost/math/policies/error_handling.hpp src/boost/math/policies/policy.hpp src/boost/math/special_functions.hpp src/boost/math/special_functions/acosh.hpp src/boost/math/special_functions/airy.hpp src/boost/math/special_functions/asinh.hpp src/boost/math/special_functions/atanh.hpp src/boost/math/special_functions/bessel.hpp src/boost/math/special_functions/beta.hpp src/boost/math/special_functions/binomial.hpp src/boost/math/special_functions/cbrt.hpp src/boost/math/special_functions/cos_pi.hpp src/boost/math/special_functions/detail/bessel_i0.hpp src/boost/math/special_functions/detail/bessel_i1.hpp src/boost/math/special_functions/detail/bessel_ik.hpp src/boost/math/special_functions/detail/bessel_j0.hpp src/boost/math/special_functions/detail/bessel_j1.hpp src/boost/math/special_functions/detail/bessel_jn.hpp src/boost/math/special_functions/detail/bessel_jy.hpp src/boost/math/special_functions/detail/bessel_jy_asym.hpp src/boost/math/special_functions/detail/bessel_jy_series.hpp src/boost/math/special_functions/detail/bessel_k0.hpp src/boost/math/special_functions/detail/bessel_k1.hpp src/boost/math/special_functions/detail/bessel_kn.hpp src/boost/math/special_functions/detail/bessel_y0.hpp src/boost/math/special_functions/detail/bessel_y1.hpp src/boost/math/special_functions/detail/bessel_yn.hpp src/boost/math/special_functions/detail/erf_inv.hpp src/boost/math/special_functions/detail/fp_traits.hpp src/boost/math/special_functions/detail/gamma_inva.hpp src/boost/math/special_functions/detail/ibeta_inv_ab.hpp src/boost/math/special_functions/detail/ibeta_inverse.hpp src/boost/math/special_functions/detail/iconv.hpp src/boost/math/special_functions/detail/igamma_inverse.hpp src/boost/math/special_functions/detail/igamma_large.hpp src/boost/math/special_functions/detail/lanczos_sse2.hpp src/boost/math/special_functions/detail/lgamma_small.hpp src/boost/math/special_functions/detail/round_fwd.hpp src/boost/math/special_functions/detail/t_distribution_inv.hpp src/boost/math/special_functions/detail/unchecked_factorial.hpp src/boost/math/special_functions/digamma.hpp src/boost/math/special_functions/ellint_1.hpp src/boost/math/special_functions/ellint_2.hpp src/boost/math/special_functions/ellint_3.hpp src/boost/math/special_functions/ellint_rc.hpp src/boost/math/special_functions/ellint_rd.hpp src/boost/math/special_functions/ellint_rf.hpp src/boost/math/special_functions/ellint_rj.hpp src/boost/math/special_functions/erf.hpp src/boost/math/special_functions/expint.hpp src/boost/math/special_functions/expm1.hpp src/boost/math/special_functions/factorials.hpp src/boost/math/special_functions/fpclassify.hpp src/boost/math/special_functions/gamma.hpp src/boost/math/special_functions/hankel.hpp src/boost/math/special_functions/hermite.hpp src/boost/math/special_functions/hypot.hpp src/boost/math/special_functions/jacobi_elliptic.hpp src/boost/math/special_functions/laguerre.hpp src/boost/math/special_functions/lanczos.hpp src/boost/math/special_functions/legendre.hpp src/boost/math/special_functions/log1p.hpp src/boost/math/special_functions/math_fwd.hpp src/boost/math/special_functions/modf.hpp src/boost/math/special_functions/next.hpp src/boost/math/special_functions/owens_t.hpp src/boost/math/special_functions/pow.hpp src/boost/math/special_functions/powm1.hpp src/boost/math/special_functions/round.hpp src/boost/math/special_functions/sign.hpp src/boost/math/special_functions/sin_pi.hpp src/boost/math/special_functions/sinc.hpp src/boost/math/special_functions/sinhc.hpp src/boost/math/special_functions/spherical_harmonic.hpp src/boost/math/special_functions/sqrt1pm1.hpp src/boost/math/special_functions/trunc.hpp src/boost/math/special_functions/zeta.hpp src/boost/math/tools/big_constant.hpp src/boost/math/tools/config.hpp src/boost/math/tools/detail/polynomial_horner1_10.hpp src/boost/math/tools/detail/polynomial_horner1_11.hpp src/boost/math/tools/detail/polynomial_horner1_12.hpp src/boost/math/tools/detail/polynomial_horner1_13.hpp src/boost/math/tools/detail/polynomial_horner1_14.hpp src/boost/math/tools/detail/polynomial_horner1_15.hpp src/boost/math/tools/detail/polynomial_horner1_16.hpp src/boost/math/tools/detail/polynomial_horner1_17.hpp src/boost/math/tools/detail/polynomial_horner1_18.hpp src/boost/math/tools/detail/polynomial_horner1_19.hpp src/boost/math/tools/detail/polynomial_horner1_2.hpp src/boost/math/tools/detail/polynomial_horner1_20.hpp src/boost/math/tools/detail/polynomial_horner1_3.hpp src/boost/math/tools/detail/polynomial_horner1_4.hpp src/boost/math/tools/detail/polynomial_horner1_5.hpp src/boost/math/tools/detail/polynomial_horner1_6.hpp src/boost/math/tools/detail/polynomial_horner1_7.hpp src/boost/math/tools/detail/polynomial_horner1_8.hpp src/boost/math/tools/detail/polynomial_horner1_9.hpp src/boost/math/tools/detail/polynomial_horner2_10.hpp src/boost/math/tools/detail/polynomial_horner2_11.hpp src/boost/math/tools/detail/polynomial_horner2_12.hpp src/boost/math/tools/detail/polynomial_horner2_13.hpp src/boost/math/tools/detail/polynomial_horner2_14.hpp src/boost/math/tools/detail/polynomial_horner2_15.hpp src/boost/math/tools/detail/polynomial_horner2_16.hpp src/boost/math/tools/detail/polynomial_horner2_17.hpp src/boost/math/tools/detail/polynomial_horner2_18.hpp src/boost/math/tools/detail/polynomial_horner2_19.hpp src/boost/math/tools/detail/polynomial_horner2_2.hpp src/boost/math/tools/detail/polynomial_horner2_20.hpp src/boost/math/tools/detail/polynomial_horner2_3.hpp src/boost/math/tools/detail/polynomial_horner2_4.hpp src/boost/math/tools/detail/polynomial_horner2_5.hpp src/boost/math/tools/detail/polynomial_horner2_6.hpp src/boost/math/tools/detail/polynomial_horner2_7.hpp src/boost/math/tools/detail/polynomial_horner2_8.hpp src/boost/math/tools/detail/polynomial_horner2_9.hpp src/boost/math/tools/detail/polynomial_horner3_10.hpp src/boost/math/tools/detail/polynomial_horner3_11.hpp src/boost/math/tools/detail/polynomial_horner3_12.hpp src/boost/math/tools/detail/polynomial_horner3_13.hpp src/boost/math/tools/detail/polynomial_horner3_14.hpp src/boost/math/tools/detail/polynomial_horner3_15.hpp src/boost/math/tools/detail/polynomial_horner3_16.hpp src/boost/math/tools/detail/polynomial_horner3_17.hpp src/boost/math/tools/detail/polynomial_horner3_18.hpp src/boost/math/tools/detail/polynomial_horner3_19.hpp src/boost/math/tools/detail/polynomial_horner3_2.hpp src/boost/math/tools/detail/polynomial_horner3_20.hpp src/boost/math/tools/detail/polynomial_horner3_3.hpp src/boost/math/tools/detail/polynomial_horner3_4.hpp src/boost/math/tools/detail/polynomial_horner3_5.hpp src/boost/math/tools/detail/polynomial_horner3_6.hpp src/boost/math/tools/detail/polynomial_horner3_7.hpp src/boost/math/tools/detail/polynomial_horner3_8.hpp src/boost/math/tools/detail/polynomial_horner3_9.hpp src/boost/math/tools/detail/rational_horner1_10.hpp src/boost/math/tools/detail/rational_horner1_11.hpp src/boost/math/tools/detail/rational_horner1_12.hpp src/boost/math/tools/detail/rational_horner1_13.hpp src/boost/math/tools/detail/rational_horner1_14.hpp src/boost/math/tools/detail/rational_horner1_15.hpp src/boost/math/tools/detail/rational_horner1_16.hpp src/boost/math/tools/detail/rational_horner1_17.hpp src/boost/math/tools/detail/rational_horner1_18.hpp src/boost/math/tools/detail/rational_horner1_19.hpp src/boost/math/tools/detail/rational_horner1_2.hpp src/boost/math/tools/detail/rational_horner1_20.hpp src/boost/math/tools/detail/rational_horner1_3.hpp src/boost/math/tools/detail/rational_horner1_4.hpp src/boost/math/tools/detail/rational_horner1_5.hpp src/boost/math/tools/detail/rational_horner1_6.hpp src/boost/math/tools/detail/rational_horner1_7.hpp src/boost/math/tools/detail/rational_horner1_8.hpp src/boost/math/tools/detail/rational_horner1_9.hpp src/boost/math/tools/detail/rational_horner2_10.hpp src/boost/math/tools/detail/rational_horner2_11.hpp src/boost/math/tools/detail/rational_horner2_12.hpp src/boost/math/tools/detail/rational_horner2_13.hpp src/boost/math/tools/detail/rational_horner2_14.hpp src/boost/math/tools/detail/rational_horner2_15.hpp src/boost/math/tools/detail/rational_horner2_16.hpp src/boost/math/tools/detail/rational_horner2_17.hpp src/boost/math/tools/detail/rational_horner2_18.hpp src/boost/math/tools/detail/rational_horner2_19.hpp src/boost/math/tools/detail/rational_horner2_2.hpp src/boost/math/tools/detail/rational_horner2_20.hpp src/boost/math/tools/detail/rational_horner2_3.hpp src/boost/math/tools/detail/rational_horner2_4.hpp src/boost/math/tools/detail/rational_horner2_5.hpp src/boost/math/tools/detail/rational_horner2_6.hpp src/boost/math/tools/detail/rational_horner2_7.hpp src/boost/math/tools/detail/rational_horner2_8.hpp src/boost/math/tools/detail/rational_horner2_9.hpp src/boost/math/tools/detail/rational_horner3_10.hpp src/boost/math/tools/detail/rational_horner3_11.hpp src/boost/math/tools/detail/rational_horner3_12.hpp src/boost/math/tools/detail/rational_horner3_13.hpp src/boost/math/tools/detail/rational_horner3_14.hpp src/boost/math/tools/detail/rational_horner3_15.hpp src/boost/math/tools/detail/rational_horner3_16.hpp src/boost/math/tools/detail/rational_horner3_17.hpp src/boost/math/tools/detail/rational_horner3_18.hpp src/boost/math/tools/detail/rational_horner3_19.hpp src/boost/math/tools/detail/rational_horner3_2.hpp src/boost/math/tools/detail/rational_horner3_20.hpp src/boost/math/tools/detail/rational_horner3_3.hpp src/boost/math/tools/detail/rational_horner3_4.hpp src/boost/math/tools/detail/rational_horner3_5.hpp src/boost/math/tools/detail/rational_horner3_6.hpp src/boost/math/tools/detail/rational_horner3_7.hpp src/boost/math/tools/detail/rational_horner3_8.hpp src/boost/math/tools/detail/rational_horner3_9.hpp src/boost/math/tools/fraction.hpp src/boost/math/tools/precision.hpp src/boost/math/tools/promotion.hpp src/boost/math/tools/rational.hpp src/boost/math/tools/real_cast.hpp src/boost/math/tools/roots.hpp src/boost/math/tools/series.hpp src/boost/math/tools/toms748_solve.hpp src/boost/math/tools/tuple.hpp src/boost/math/tools/user.hpp src/boost/math/tools/workaround.hpp src/boost/math_fwd.hpp src/boost/mem_fn.hpp src/boost/memory_order.hpp src/boost/move/algorithm.hpp src/boost/move/core.hpp src/boost/move/detail/config_begin.hpp src/boost/move/detail/config_end.hpp src/boost/move/detail/meta_utils.hpp src/boost/move/iterator.hpp src/boost/move/move.hpp src/boost/move/traits.hpp src/boost/move/utility.hpp src/boost/mpi.hpp src/boost/mpi/allocator.hpp src/boost/mpi/collectives.hpp src/boost/mpi/collectives/all_gather.hpp src/boost/mpi/collectives/all_reduce.hpp src/boost/mpi/collectives/all_to_all.hpp src/boost/mpi/collectives/broadcast.hpp src/boost/mpi/collectives/gather.hpp src/boost/mpi/collectives/reduce.hpp src/boost/mpi/collectives/scan.hpp src/boost/mpi/collectives/scatter.hpp src/boost/mpi/collectives_fwd.hpp src/boost/mpi/communicator.hpp src/boost/mpi/config.hpp src/boost/mpi/datatype.hpp src/boost/mpi/datatype_fwd.hpp src/boost/mpi/detail/binary_buffer_iprimitive.hpp src/boost/mpi/detail/binary_buffer_oprimitive.hpp src/boost/mpi/detail/broadcast_sc.hpp src/boost/mpi/detail/communicator_sc.hpp src/boost/mpi/detail/computation_tree.hpp src/boost/mpi/detail/content_oarchive.hpp src/boost/mpi/detail/forward_skeleton_iarchive.hpp src/boost/mpi/detail/forward_skeleton_oarchive.hpp src/boost/mpi/detail/ignore_iprimitive.hpp src/boost/mpi/detail/ignore_oprimitive.hpp src/boost/mpi/detail/ignore_skeleton_oarchive.hpp src/boost/mpi/detail/mpi_datatype_cache.hpp src/boost/mpi/detail/mpi_datatype_oarchive.hpp src/boost/mpi/detail/mpi_datatype_primitive.hpp src/boost/mpi/detail/packed_iprimitive.hpp src/boost/mpi/detail/packed_oprimitive.hpp src/boost/mpi/detail/point_to_point.hpp src/boost/mpi/detail/text_skeleton_oarchive.hpp src/boost/mpi/environment.hpp src/boost/mpi/exception.hpp src/boost/mpi/graph_communicator.hpp src/boost/mpi/group.hpp src/boost/mpi/intercommunicator.hpp src/boost/mpi/nonblocking.hpp src/boost/mpi/operations.hpp src/boost/mpi/packed_iarchive.hpp src/boost/mpi/packed_oarchive.hpp src/boost/mpi/python.hpp src/boost/mpi/python/config.hpp src/boost/mpi/python/serialize.hpp src/boost/mpi/python/skeleton_and_content.hpp src/boost/mpi/request.hpp src/boost/mpi/skeleton_and_content.hpp src/boost/mpi/skeleton_and_content_fwd.hpp src/boost/mpi/status.hpp src/boost/mpi/timer.hpp src/boost/mpl/advance.hpp src/boost/mpl/advance_fwd.hpp src/boost/mpl/always.hpp src/boost/mpl/and.hpp src/boost/mpl/apply.hpp src/boost/mpl/apply_fwd.hpp src/boost/mpl/apply_wrap.hpp src/boost/mpl/arg.hpp src/boost/mpl/arg_fwd.hpp src/boost/mpl/assert.hpp src/boost/mpl/at.hpp src/boost/mpl/at_fwd.hpp src/boost/mpl/aux_/adl_barrier.hpp src/boost/mpl/aux_/advance_backward.hpp src/boost/mpl/aux_/advance_forward.hpp src/boost/mpl/aux_/arg_typedef.hpp src/boost/mpl/aux_/arithmetic_op.hpp src/boost/mpl/aux_/arity.hpp src/boost/mpl/aux_/arity_spec.hpp src/boost/mpl/aux_/at_impl.hpp src/boost/mpl/aux_/back_impl.hpp src/boost/mpl/aux_/begin_end_impl.hpp src/boost/mpl/aux_/clear_impl.hpp src/boost/mpl/aux_/common_name_wknd.hpp src/boost/mpl/aux_/comparison_op.hpp src/boost/mpl/aux_/config/adl.hpp src/boost/mpl/aux_/config/arrays.hpp src/boost/mpl/aux_/config/bcc.hpp src/boost/mpl/aux_/config/bind.hpp src/boost/mpl/aux_/config/compiler.hpp src/boost/mpl/aux_/config/ctps.hpp src/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp src/boost/mpl/aux_/config/dtp.hpp src/boost/mpl/aux_/config/eti.hpp src/boost/mpl/aux_/config/forwarding.hpp src/boost/mpl/aux_/config/gcc.hpp src/boost/mpl/aux_/config/has_apply.hpp src/boost/mpl/aux_/config/has_xxx.hpp src/boost/mpl/aux_/config/integral.hpp src/boost/mpl/aux_/config/intel.hpp src/boost/mpl/aux_/config/lambda.hpp src/boost/mpl/aux_/config/msvc.hpp src/boost/mpl/aux_/config/msvc_typename.hpp src/boost/mpl/aux_/config/nttp.hpp src/boost/mpl/aux_/config/operators.hpp src/boost/mpl/aux_/config/overload_resolution.hpp src/boost/mpl/aux_/config/pp_counter.hpp src/boost/mpl/aux_/config/preprocessor.hpp src/boost/mpl/aux_/config/static_constant.hpp src/boost/mpl/aux_/config/ttp.hpp src/boost/mpl/aux_/config/typeof.hpp src/boost/mpl/aux_/config/use_preprocessed.hpp src/boost/mpl/aux_/config/workaround.hpp src/boost/mpl/aux_/contains_impl.hpp src/boost/mpl/aux_/count_args.hpp src/boost/mpl/aux_/empty_impl.hpp src/boost/mpl/aux_/erase_impl.hpp src/boost/mpl/aux_/erase_key_impl.hpp src/boost/mpl/aux_/find_if_pred.hpp src/boost/mpl/aux_/fold_impl.hpp src/boost/mpl/aux_/fold_impl_body.hpp src/boost/mpl/aux_/front_impl.hpp src/boost/mpl/aux_/full_lambda.hpp src/boost/mpl/aux_/has_apply.hpp src/boost/mpl/aux_/has_begin.hpp src/boost/mpl/aux_/has_key_impl.hpp src/boost/mpl/aux_/has_rebind.hpp src/boost/mpl/aux_/has_size.hpp src/boost/mpl/aux_/has_tag.hpp src/boost/mpl/aux_/has_type.hpp src/boost/mpl/aux_/include_preprocessed.hpp src/boost/mpl/aux_/insert_impl.hpp src/boost/mpl/aux_/insert_range_impl.hpp src/boost/mpl/aux_/inserter_algorithm.hpp src/boost/mpl/aux_/integral_wrapper.hpp src/boost/mpl/aux_/is_msvc_eti_arg.hpp src/boost/mpl/aux_/iter_apply.hpp src/boost/mpl/aux_/iter_fold_if_impl.hpp src/boost/mpl/aux_/iter_fold_impl.hpp src/boost/mpl/aux_/iter_push_front.hpp src/boost/mpl/aux_/joint_iter.hpp src/boost/mpl/aux_/lambda_arity_param.hpp src/boost/mpl/aux_/lambda_no_ctps.hpp src/boost/mpl/aux_/lambda_spec.hpp src/boost/mpl/aux_/lambda_support.hpp src/boost/mpl/aux_/largest_int.hpp src/boost/mpl/aux_/logical_op.hpp src/boost/mpl/aux_/msvc_dtw.hpp src/boost/mpl/aux_/msvc_eti_base.hpp src/boost/mpl/aux_/msvc_is_class.hpp src/boost/mpl/aux_/msvc_never_true.hpp src/boost/mpl/aux_/msvc_type.hpp src/boost/mpl/aux_/na.hpp src/boost/mpl/aux_/na_assert.hpp src/boost/mpl/aux_/na_fwd.hpp src/boost/mpl/aux_/na_spec.hpp src/boost/mpl/aux_/nested_type_wknd.hpp src/boost/mpl/aux_/nttp_decl.hpp src/boost/mpl/aux_/numeric_cast_utils.hpp src/boost/mpl/aux_/numeric_op.hpp src/boost/mpl/aux_/O1_size_impl.hpp src/boost/mpl/aux_/overload_names.hpp src/boost/mpl/aux_/pop_back_impl.hpp src/boost/mpl/aux_/pop_front_impl.hpp src/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp src/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp src/boost/mpl/aux_/preprocessed/bcc/and.hpp src/boost/mpl/aux_/preprocessed/bcc/apply.hpp src/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/bcc/arg.hpp src/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp src/boost/mpl/aux_/preprocessed/bcc/bind.hpp src/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/bcc/bitand.hpp src/boost/mpl/aux_/preprocessed/bcc/bitor.hpp src/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp src/boost/mpl/aux_/preprocessed/bcc/deque.hpp src/boost/mpl/aux_/preprocessed/bcc/divides.hpp src/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp src/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp src/boost/mpl/aux_/preprocessed/bcc/greater.hpp src/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp src/boost/mpl/aux_/preprocessed/bcc/inherit.hpp src/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/bcc/less.hpp src/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp src/boost/mpl/aux_/preprocessed/bcc/list.hpp src/boost/mpl/aux_/preprocessed/bcc/list_c.hpp src/boost/mpl/aux_/preprocessed/bcc/map.hpp src/boost/mpl/aux_/preprocessed/bcc/minus.hpp src/boost/mpl/aux_/preprocessed/bcc/modulus.hpp src/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/bcc/or.hpp src/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp src/boost/mpl/aux_/preprocessed/bcc/plus.hpp src/boost/mpl/aux_/preprocessed/bcc/quote.hpp src/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc/set.hpp src/boost/mpl/aux_/preprocessed/bcc/set_c.hpp src/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp src/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp src/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp src/boost/mpl/aux_/preprocessed/bcc/times.hpp src/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp src/boost/mpl/aux_/preprocessed/bcc/vector.hpp src/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp src/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp src/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp src/boost/mpl/aux_/preprocessed/bcc551/and.hpp src/boost/mpl/aux_/preprocessed/bcc551/apply.hpp src/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/bcc551/arg.hpp src/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp src/boost/mpl/aux_/preprocessed/bcc551/bind.hpp src/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp src/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp src/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp src/boost/mpl/aux_/preprocessed/bcc551/deque.hpp src/boost/mpl/aux_/preprocessed/bcc551/divides.hpp src/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp src/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp src/boost/mpl/aux_/preprocessed/bcc551/greater.hpp src/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp src/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp src/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/bcc551/less.hpp src/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp src/boost/mpl/aux_/preprocessed/bcc551/list.hpp src/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp src/boost/mpl/aux_/preprocessed/bcc551/map.hpp src/boost/mpl/aux_/preprocessed/bcc551/minus.hpp src/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp src/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/bcc551/or.hpp src/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp src/boost/mpl/aux_/preprocessed/bcc551/plus.hpp src/boost/mpl/aux_/preprocessed/bcc551/quote.hpp src/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc551/set.hpp src/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp src/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp src/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp src/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp src/boost/mpl/aux_/preprocessed/bcc551/times.hpp src/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp src/boost/mpl/aux_/preprocessed/bcc551/vector.hpp src/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp src/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp src/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp src/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp src/boost/mpl/aux_/preprocessed/dmc/and.hpp src/boost/mpl/aux_/preprocessed/dmc/apply.hpp src/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/dmc/arg.hpp src/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp src/boost/mpl/aux_/preprocessed/dmc/bind.hpp src/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/dmc/bitand.hpp src/boost/mpl/aux_/preprocessed/dmc/bitor.hpp src/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp src/boost/mpl/aux_/preprocessed/dmc/deque.hpp src/boost/mpl/aux_/preprocessed/dmc/divides.hpp src/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp src/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp src/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp src/boost/mpl/aux_/preprocessed/dmc/greater.hpp src/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp src/boost/mpl/aux_/preprocessed/dmc/inherit.hpp src/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/dmc/less.hpp src/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp src/boost/mpl/aux_/preprocessed/dmc/list.hpp src/boost/mpl/aux_/preprocessed/dmc/list_c.hpp src/boost/mpl/aux_/preprocessed/dmc/map.hpp src/boost/mpl/aux_/preprocessed/dmc/minus.hpp src/boost/mpl/aux_/preprocessed/dmc/modulus.hpp src/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/dmc/or.hpp src/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp src/boost/mpl/aux_/preprocessed/dmc/plus.hpp src/boost/mpl/aux_/preprocessed/dmc/quote.hpp src/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/dmc/set.hpp src/boost/mpl/aux_/preprocessed/dmc/set_c.hpp src/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp src/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp src/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp src/boost/mpl/aux_/preprocessed/dmc/times.hpp src/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp src/boost/mpl/aux_/preprocessed/dmc/vector.hpp src/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp src/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp src/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp src/boost/mpl/aux_/preprocessed/gcc/and.hpp src/boost/mpl/aux_/preprocessed/gcc/apply.hpp src/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/gcc/arg.hpp src/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp src/boost/mpl/aux_/preprocessed/gcc/bind.hpp src/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/gcc/bitand.hpp src/boost/mpl/aux_/preprocessed/gcc/bitor.hpp src/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp src/boost/mpl/aux_/preprocessed/gcc/deque.hpp src/boost/mpl/aux_/preprocessed/gcc/divides.hpp src/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp src/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp src/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp src/boost/mpl/aux_/preprocessed/gcc/greater.hpp src/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp src/boost/mpl/aux_/preprocessed/gcc/inherit.hpp src/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/gcc/less.hpp src/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp src/boost/mpl/aux_/preprocessed/gcc/list.hpp src/boost/mpl/aux_/preprocessed/gcc/list_c.hpp src/boost/mpl/aux_/preprocessed/gcc/map.hpp src/boost/mpl/aux_/preprocessed/gcc/minus.hpp src/boost/mpl/aux_/preprocessed/gcc/modulus.hpp src/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/gcc/or.hpp src/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp src/boost/mpl/aux_/preprocessed/gcc/plus.hpp src/boost/mpl/aux_/preprocessed/gcc/quote.hpp src/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/gcc/set.hpp src/boost/mpl/aux_/preprocessed/gcc/set_c.hpp src/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp src/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp src/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp src/boost/mpl/aux_/preprocessed/gcc/times.hpp src/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp src/boost/mpl/aux_/preprocessed/gcc/vector.hpp src/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp src/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp src/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp src/boost/mpl/aux_/preprocessed/msvc60/and.hpp src/boost/mpl/aux_/preprocessed/msvc60/apply.hpp src/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/msvc60/arg.hpp src/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp src/boost/mpl/aux_/preprocessed/msvc60/bind.hpp src/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp src/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp src/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp src/boost/mpl/aux_/preprocessed/msvc60/deque.hpp src/boost/mpl/aux_/preprocessed/msvc60/divides.hpp src/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp src/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp src/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp src/boost/mpl/aux_/preprocessed/msvc60/greater.hpp src/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp src/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp src/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/msvc60/less.hpp src/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp src/boost/mpl/aux_/preprocessed/msvc60/list.hpp src/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp src/boost/mpl/aux_/preprocessed/msvc60/map.hpp src/boost/mpl/aux_/preprocessed/msvc60/minus.hpp src/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp src/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/msvc60/or.hpp src/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp src/boost/mpl/aux_/preprocessed/msvc60/plus.hpp src/boost/mpl/aux_/preprocessed/msvc60/quote.hpp src/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/msvc60/set.hpp src/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp src/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp src/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp src/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp src/boost/mpl/aux_/preprocessed/msvc60/times.hpp src/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp src/boost/mpl/aux_/preprocessed/msvc60/vector.hpp src/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp src/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp src/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp src/boost/mpl/aux_/preprocessed/msvc70/and.hpp src/boost/mpl/aux_/preprocessed/msvc70/apply.hpp src/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/msvc70/arg.hpp src/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp src/boost/mpl/aux_/preprocessed/msvc70/bind.hpp src/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp src/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp src/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp src/boost/mpl/aux_/preprocessed/msvc70/deque.hpp src/boost/mpl/aux_/preprocessed/msvc70/divides.hpp src/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp src/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp src/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp src/boost/mpl/aux_/preprocessed/msvc70/greater.hpp src/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp src/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp src/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/msvc70/less.hpp src/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp src/boost/mpl/aux_/preprocessed/msvc70/list.hpp src/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp src/boost/mpl/aux_/preprocessed/msvc70/map.hpp src/boost/mpl/aux_/preprocessed/msvc70/minus.hpp src/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp src/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/msvc70/or.hpp src/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp src/boost/mpl/aux_/preprocessed/msvc70/plus.hpp src/boost/mpl/aux_/preprocessed/msvc70/quote.hpp src/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/msvc70/set.hpp src/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp src/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp src/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp src/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp src/boost/mpl/aux_/preprocessed/msvc70/times.hpp src/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp src/boost/mpl/aux_/preprocessed/msvc70/vector.hpp src/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp src/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp src/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp src/boost/mpl/aux_/preprocessed/mwcw/and.hpp src/boost/mpl/aux_/preprocessed/mwcw/apply.hpp src/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/mwcw/arg.hpp src/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp src/boost/mpl/aux_/preprocessed/mwcw/bind.hpp src/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp src/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp src/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp src/boost/mpl/aux_/preprocessed/mwcw/deque.hpp src/boost/mpl/aux_/preprocessed/mwcw/divides.hpp src/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp src/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp src/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp src/boost/mpl/aux_/preprocessed/mwcw/greater.hpp src/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp src/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp src/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/mwcw/less.hpp src/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp src/boost/mpl/aux_/preprocessed/mwcw/list.hpp src/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp src/boost/mpl/aux_/preprocessed/mwcw/map.hpp src/boost/mpl/aux_/preprocessed/mwcw/minus.hpp src/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp src/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/mwcw/or.hpp src/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp src/boost/mpl/aux_/preprocessed/mwcw/plus.hpp src/boost/mpl/aux_/preprocessed/mwcw/quote.hpp src/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/mwcw/set.hpp src/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp src/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp src/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp src/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp src/boost/mpl/aux_/preprocessed/mwcw/times.hpp src/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp src/boost/mpl/aux_/preprocessed/mwcw/vector.hpp src/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp src/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp src/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp src/boost/mpl/aux_/preprocessed/no_ctps/and.hpp src/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp src/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp src/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp src/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp src/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp src/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp src/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp src/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp src/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp src/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp src/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp src/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp src/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp src/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp src/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp src/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/no_ctps/less.hpp src/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp src/boost/mpl/aux_/preprocessed/no_ctps/list.hpp src/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp src/boost/mpl/aux_/preprocessed/no_ctps/map.hpp src/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp src/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp src/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/no_ctps/or.hpp src/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp src/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp src/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp src/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/no_ctps/set.hpp src/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp src/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp src/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp src/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp src/boost/mpl/aux_/preprocessed/no_ctps/times.hpp src/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp src/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp src/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp src/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp src/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp src/boost/mpl/aux_/preprocessed/no_ttp/and.hpp src/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp src/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp src/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp src/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp src/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp src/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp src/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp src/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp src/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp src/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp src/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp src/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp src/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp src/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp src/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp src/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/no_ttp/less.hpp src/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp src/boost/mpl/aux_/preprocessed/no_ttp/list.hpp src/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp src/boost/mpl/aux_/preprocessed/no_ttp/map.hpp src/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp src/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp src/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/no_ttp/or.hpp src/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp src/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp src/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp src/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/no_ttp/set.hpp src/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp src/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp src/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp src/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp src/boost/mpl/aux_/preprocessed/no_ttp/times.hpp src/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp src/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp src/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp src/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp src/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp src/boost/mpl/aux_/preprocessed/plain/and.hpp src/boost/mpl/aux_/preprocessed/plain/apply.hpp src/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp src/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp src/boost/mpl/aux_/preprocessed/plain/arg.hpp src/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp src/boost/mpl/aux_/preprocessed/plain/bind.hpp src/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp src/boost/mpl/aux_/preprocessed/plain/bitand.hpp src/boost/mpl/aux_/preprocessed/plain/bitor.hpp src/boost/mpl/aux_/preprocessed/plain/bitxor.hpp src/boost/mpl/aux_/preprocessed/plain/deque.hpp src/boost/mpl/aux_/preprocessed/plain/divides.hpp src/boost/mpl/aux_/preprocessed/plain/equal_to.hpp src/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp src/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp src/boost/mpl/aux_/preprocessed/plain/greater.hpp src/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp src/boost/mpl/aux_/preprocessed/plain/inherit.hpp src/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp src/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp src/boost/mpl/aux_/preprocessed/plain/less.hpp src/boost/mpl/aux_/preprocessed/plain/less_equal.hpp src/boost/mpl/aux_/preprocessed/plain/list.hpp src/boost/mpl/aux_/preprocessed/plain/list_c.hpp src/boost/mpl/aux_/preprocessed/plain/map.hpp src/boost/mpl/aux_/preprocessed/plain/minus.hpp src/boost/mpl/aux_/preprocessed/plain/modulus.hpp src/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp src/boost/mpl/aux_/preprocessed/plain/or.hpp src/boost/mpl/aux_/preprocessed/plain/placeholders.hpp src/boost/mpl/aux_/preprocessed/plain/plus.hpp src/boost/mpl/aux_/preprocessed/plain/quote.hpp src/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp src/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/preprocessed/plain/set.hpp src/boost/mpl/aux_/preprocessed/plain/set_c.hpp src/boost/mpl/aux_/preprocessed/plain/shift_left.hpp src/boost/mpl/aux_/preprocessed/plain/shift_right.hpp src/boost/mpl/aux_/preprocessed/plain/template_arity.hpp src/boost/mpl/aux_/preprocessed/plain/times.hpp src/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp src/boost/mpl/aux_/preprocessed/plain/vector.hpp src/boost/mpl/aux_/preprocessed/plain/vector_c.hpp src/boost/mpl/aux_/preprocessor/add.hpp src/boost/mpl/aux_/preprocessor/def_params_tail.hpp src/boost/mpl/aux_/preprocessor/default_params.hpp src/boost/mpl/aux_/preprocessor/enum.hpp src/boost/mpl/aux_/preprocessor/ext_params.hpp src/boost/mpl/aux_/preprocessor/filter_params.hpp src/boost/mpl/aux_/preprocessor/params.hpp src/boost/mpl/aux_/preprocessor/partial_spec_params.hpp src/boost/mpl/aux_/preprocessor/range.hpp src/boost/mpl/aux_/preprocessor/repeat.hpp src/boost/mpl/aux_/preprocessor/sub.hpp src/boost/mpl/aux_/preprocessor/tuple.hpp src/boost/mpl/aux_/ptr_to_ref.hpp src/boost/mpl/aux_/push_back_impl.hpp src/boost/mpl/aux_/push_front_impl.hpp src/boost/mpl/aux_/reverse_fold_impl.hpp src/boost/mpl/aux_/reverse_fold_impl_body.hpp src/boost/mpl/aux_/reverse_iter_fold_impl.hpp src/boost/mpl/aux_/sequence_wrapper.hpp src/boost/mpl/aux_/single_element_iter.hpp src/boost/mpl/aux_/size_impl.hpp src/boost/mpl/aux_/static_cast.hpp src/boost/mpl/aux_/template_arity.hpp src/boost/mpl/aux_/template_arity_fwd.hpp src/boost/mpl/aux_/traits_lambda_spec.hpp src/boost/mpl/aux_/type_wrapper.hpp src/boost/mpl/aux_/unwrap.hpp src/boost/mpl/aux_/value_wknd.hpp src/boost/mpl/aux_/yes_no.hpp src/boost/mpl/back.hpp src/boost/mpl/back_fwd.hpp src/boost/mpl/back_inserter.hpp src/boost/mpl/base.hpp src/boost/mpl/begin.hpp src/boost/mpl/begin_end.hpp src/boost/mpl/begin_end_fwd.hpp src/boost/mpl/bind.hpp src/boost/mpl/bind_fwd.hpp src/boost/mpl/bitand.hpp src/boost/mpl/bitxor.hpp src/boost/mpl/bool.hpp src/boost/mpl/bool_fwd.hpp src/boost/mpl/clear.hpp src/boost/mpl/clear_fwd.hpp src/boost/mpl/comparison.hpp src/boost/mpl/contains.hpp src/boost/mpl/contains_fwd.hpp src/boost/mpl/copy.hpp src/boost/mpl/count_if.hpp src/boost/mpl/deref.hpp src/boost/mpl/distance.hpp src/boost/mpl/distance_fwd.hpp src/boost/mpl/divides.hpp src/boost/mpl/empty.hpp src/boost/mpl/empty_base.hpp src/boost/mpl/empty_fwd.hpp src/boost/mpl/end.hpp src/boost/mpl/equal_to.hpp src/boost/mpl/erase.hpp src/boost/mpl/erase_fwd.hpp src/boost/mpl/erase_key.hpp src/boost/mpl/erase_key_fwd.hpp src/boost/mpl/eval_if.hpp src/boost/mpl/find.hpp src/boost/mpl/find_if.hpp src/boost/mpl/fold.hpp src/boost/mpl/for_each.hpp src/boost/mpl/front.hpp src/boost/mpl/front_fwd.hpp src/boost/mpl/front_inserter.hpp src/boost/mpl/greater.hpp src/boost/mpl/greater_equal.hpp src/boost/mpl/has_key.hpp src/boost/mpl/has_key_fwd.hpp src/boost/mpl/has_xxx.hpp src/boost/mpl/identity.hpp src/boost/mpl/if.hpp src/boost/mpl/inherit.hpp src/boost/mpl/insert.hpp src/boost/mpl/insert_fwd.hpp src/boost/mpl/insert_range.hpp src/boost/mpl/insert_range_fwd.hpp src/boost/mpl/inserter.hpp src/boost/mpl/int.hpp src/boost/mpl/int_fwd.hpp src/boost/mpl/integral_c.hpp src/boost/mpl/integral_c_fwd.hpp src/boost/mpl/integral_c_tag.hpp src/boost/mpl/is_placeholder.hpp src/boost/mpl/is_sequence.hpp src/boost/mpl/iter_fold.hpp src/boost/mpl/iter_fold_if.hpp src/boost/mpl/iterator_category.hpp src/boost/mpl/iterator_range.hpp src/boost/mpl/iterator_tags.hpp src/boost/mpl/joint_view.hpp src/boost/mpl/key_type_fwd.hpp src/boost/mpl/lambda.hpp src/boost/mpl/lambda_fwd.hpp src/boost/mpl/less.hpp src/boost/mpl/less_equal.hpp src/boost/mpl/limits/arity.hpp src/boost/mpl/limits/list.hpp src/boost/mpl/limits/unrolling.hpp src/boost/mpl/limits/vector.hpp src/boost/mpl/list.hpp src/boost/mpl/list/aux_/begin_end.hpp src/boost/mpl/list/aux_/clear.hpp src/boost/mpl/list/aux_/empty.hpp src/boost/mpl/list/aux_/front.hpp src/boost/mpl/list/aux_/include_preprocessed.hpp src/boost/mpl/list/aux_/item.hpp src/boost/mpl/list/aux_/iterator.hpp src/boost/mpl/list/aux_/numbered.hpp src/boost/mpl/list/aux_/numbered_c.hpp src/boost/mpl/list/aux_/O1_size.hpp src/boost/mpl/list/aux_/pop_front.hpp src/boost/mpl/list/aux_/preprocessed/plain/list10.hpp src/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp src/boost/mpl/list/aux_/preprocessed/plain/list20.hpp src/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp src/boost/mpl/list/aux_/preprocessed/plain/list30.hpp src/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp src/boost/mpl/list/aux_/preprocessed/plain/list40.hpp src/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp src/boost/mpl/list/aux_/preprocessed/plain/list50.hpp src/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp src/boost/mpl/list/aux_/push_back.hpp src/boost/mpl/list/aux_/push_front.hpp src/boost/mpl/list/aux_/size.hpp src/boost/mpl/list/aux_/tag.hpp src/boost/mpl/list/list0.hpp src/boost/mpl/list/list0_c.hpp src/boost/mpl/list/list10.hpp src/boost/mpl/list/list10_c.hpp src/boost/mpl/list/list20.hpp src/boost/mpl/list/list20_c.hpp src/boost/mpl/list/list30.hpp src/boost/mpl/list/list30_c.hpp src/boost/mpl/list/list40.hpp src/boost/mpl/list/list40_c.hpp src/boost/mpl/list/list50.hpp src/boost/mpl/list/list50_c.hpp src/boost/mpl/logical.hpp src/boost/mpl/long.hpp src/boost/mpl/long_fwd.hpp src/boost/mpl/max_element.hpp src/boost/mpl/min_max.hpp src/boost/mpl/minus.hpp src/boost/mpl/multiplies.hpp src/boost/mpl/negate.hpp src/boost/mpl/next.hpp src/boost/mpl/next_prior.hpp src/boost/mpl/not.hpp src/boost/mpl/not_equal_to.hpp src/boost/mpl/numeric_cast.hpp src/boost/mpl/O1_size.hpp src/boost/mpl/O1_size_fwd.hpp src/boost/mpl/or.hpp src/boost/mpl/pair.hpp src/boost/mpl/pair_view.hpp src/boost/mpl/placeholders.hpp src/boost/mpl/plus.hpp src/boost/mpl/pop_back.hpp src/boost/mpl/pop_back_fwd.hpp src/boost/mpl/pop_front.hpp src/boost/mpl/pop_front_fwd.hpp src/boost/mpl/print.hpp src/boost/mpl/prior.hpp src/boost/mpl/protect.hpp src/boost/mpl/push_back.hpp src/boost/mpl/push_back_fwd.hpp src/boost/mpl/push_front.hpp src/boost/mpl/push_front_fwd.hpp src/boost/mpl/quote.hpp src/boost/mpl/remove.hpp src/boost/mpl/remove_if.hpp src/boost/mpl/reverse_fold.hpp src/boost/mpl/reverse_iter_fold.hpp src/boost/mpl/same_as.hpp src/boost/mpl/sequence_tag.hpp src/boost/mpl/sequence_tag_fwd.hpp src/boost/mpl/set/aux_/at_impl.hpp src/boost/mpl/set/aux_/begin_end_impl.hpp src/boost/mpl/set/aux_/clear_impl.hpp src/boost/mpl/set/aux_/empty_impl.hpp src/boost/mpl/set/aux_/erase_impl.hpp src/boost/mpl/set/aux_/erase_key_impl.hpp src/boost/mpl/set/aux_/has_key_impl.hpp src/boost/mpl/set/aux_/insert_impl.hpp src/boost/mpl/set/aux_/item.hpp src/boost/mpl/set/aux_/iterator.hpp src/boost/mpl/set/aux_/key_type_impl.hpp src/boost/mpl/set/aux_/set0.hpp src/boost/mpl/set/aux_/size_impl.hpp src/boost/mpl/set/aux_/tag.hpp src/boost/mpl/set/aux_/value_type_impl.hpp src/boost/mpl/set/set0.hpp src/boost/mpl/single_view.hpp src/boost/mpl/size.hpp src/boost/mpl/size_fwd.hpp src/boost/mpl/size_t.hpp src/boost/mpl/size_t_fwd.hpp src/boost/mpl/sizeof.hpp src/boost/mpl/tag.hpp src/boost/mpl/times.hpp src/boost/mpl/transform.hpp src/boost/mpl/value_type_fwd.hpp src/boost/mpl/vector.hpp src/boost/mpl/vector/aux_/at.hpp src/boost/mpl/vector/aux_/back.hpp src/boost/mpl/vector/aux_/begin_end.hpp src/boost/mpl/vector/aux_/clear.hpp src/boost/mpl/vector/aux_/empty.hpp src/boost/mpl/vector/aux_/front.hpp src/boost/mpl/vector/aux_/include_preprocessed.hpp src/boost/mpl/vector/aux_/item.hpp src/boost/mpl/vector/aux_/iterator.hpp src/boost/mpl/vector/aux_/numbered.hpp src/boost/mpl/vector/aux_/numbered_c.hpp src/boost/mpl/vector/aux_/O1_size.hpp src/boost/mpl/vector/aux_/pop_back.hpp src/boost/mpl/vector/aux_/pop_front.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp src/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp src/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp src/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp src/boost/mpl/vector/aux_/push_back.hpp src/boost/mpl/vector/aux_/push_front.hpp src/boost/mpl/vector/aux_/size.hpp src/boost/mpl/vector/aux_/tag.hpp src/boost/mpl/vector/aux_/vector0.hpp src/boost/mpl/vector/vector0.hpp src/boost/mpl/vector/vector0_c.hpp src/boost/mpl/vector/vector10.hpp src/boost/mpl/vector/vector10_c.hpp src/boost/mpl/vector/vector20.hpp src/boost/mpl/vector/vector20_c.hpp src/boost/mpl/vector/vector30.hpp src/boost/mpl/vector/vector30_c.hpp src/boost/mpl/vector/vector40.hpp src/boost/mpl/vector/vector40_c.hpp src/boost/mpl/vector/vector50.hpp src/boost/mpl/vector/vector50_c.hpp src/boost/mpl/void.hpp src/boost/mpl/void_fwd.hpp src/boost/multi_index/detail/access_specifier.hpp src/boost/multi_index/detail/adl_swap.hpp src/boost/multi_index/detail/archive_constructed.hpp src/boost/multi_index/detail/auto_space.hpp src/boost/multi_index/detail/base_type.hpp src/boost/multi_index/detail/bidir_node_iterator.hpp src/boost/multi_index/detail/bucket_array.hpp src/boost/multi_index/detail/converter.hpp src/boost/multi_index/detail/copy_map.hpp src/boost/multi_index/detail/has_tag.hpp src/boost/multi_index/detail/hash_index_args.hpp src/boost/multi_index/detail/hash_index_iterator.hpp src/boost/multi_index/detail/hash_index_node.hpp src/boost/multi_index/detail/header_holder.hpp src/boost/multi_index/detail/index_base.hpp src/boost/multi_index/detail/index_loader.hpp src/boost/multi_index/detail/index_matcher.hpp src/boost/multi_index/detail/index_node_base.hpp src/boost/multi_index/detail/index_saver.hpp src/boost/multi_index/detail/invariant_assert.hpp src/boost/multi_index/detail/is_index_list.hpp src/boost/multi_index/detail/iter_adaptor.hpp src/boost/multi_index/detail/modify_key_adaptor.hpp src/boost/multi_index/detail/msvc_index_specifier.hpp src/boost/multi_index/detail/no_duplicate_tags.hpp src/boost/multi_index/detail/node_type.hpp src/boost/multi_index/detail/ord_index_args.hpp src/boost/multi_index/detail/prevent_eti.hpp src/boost/multi_index/detail/safe_ctr_proxy.hpp src/boost/multi_index/detail/safe_mode.hpp src/boost/multi_index/detail/scope_guard.hpp src/boost/multi_index/detail/seq_index_node.hpp src/boost/multi_index/detail/seq_index_ops.hpp src/boost/multi_index/detail/serialization_version.hpp src/boost/multi_index/hashed_index.hpp src/boost/multi_index/hashed_index_fwd.hpp src/boost/multi_index/identity.hpp src/boost/multi_index/identity_fwd.hpp src/boost/multi_index/indexed_by.hpp src/boost/multi_index/member.hpp src/boost/multi_index/ordered_index_fwd.hpp src/boost/multi_index/safe_mode_errors.hpp src/boost/multi_index/sequenced_index.hpp src/boost/multi_index/sequenced_index_fwd.hpp src/boost/multi_index/tag.hpp src/boost/multi_index_container.hpp src/boost/multi_index_container_fwd.hpp src/boost/next_prior.hpp src/boost/non_type.hpp src/boost/noncopyable.hpp src/boost/none.hpp src/boost/none_t.hpp src/boost/numeric/conversion/bounds.hpp src/boost/numeric/conversion/cast.hpp src/boost/numeric/conversion/conversion_traits.hpp src/boost/numeric/conversion/converter.hpp src/boost/numeric/conversion/converter_policies.hpp src/boost/numeric/conversion/detail/bounds.hpp src/boost/numeric/conversion/detail/conversion_traits.hpp src/boost/numeric/conversion/detail/converter.hpp src/boost/numeric/conversion/detail/int_float_mixture.hpp src/boost/numeric/conversion/detail/is_subranged.hpp src/boost/numeric/conversion/detail/meta.hpp src/boost/numeric/conversion/detail/numeric_cast_traits.hpp src/boost/numeric/conversion/detail/old_numeric_cast.hpp src/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp src/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp src/boost/numeric/conversion/detail/sign_mixture.hpp src/boost/numeric/conversion/detail/udt_builtin_mixture.hpp src/boost/numeric/conversion/int_float_mixture_enum.hpp src/boost/numeric/conversion/numeric_cast_traits.hpp src/boost/numeric/conversion/sign_mixture_enum.hpp src/boost/numeric/conversion/udt_builtin_mixture_enum.hpp src/boost/numeric/ublas/detail/config.hpp src/boost/numeric/ublas/detail/definitions.hpp src/boost/numeric/ublas/detail/duff.hpp src/boost/numeric/ublas/detail/iterator.hpp src/boost/numeric/ublas/detail/matrix_assign.hpp src/boost/numeric/ublas/detail/raw.hpp src/boost/numeric/ublas/detail/returntype_deduction.hpp src/boost/numeric/ublas/detail/temporary.hpp src/boost/numeric/ublas/detail/vector_assign.hpp src/boost/numeric/ublas/exception.hpp src/boost/numeric/ublas/expression_types.hpp src/boost/numeric/ublas/functional.hpp src/boost/numeric/ublas/fwd.hpp src/boost/numeric/ublas/io.hpp src/boost/numeric/ublas/lu.hpp src/boost/numeric/ublas/matrix.hpp src/boost/numeric/ublas/matrix_expression.hpp src/boost/numeric/ublas/matrix_proxy.hpp src/boost/numeric/ublas/operation.hpp src/boost/numeric/ublas/storage.hpp src/boost/numeric/ublas/traits.hpp src/boost/numeric/ublas/triangular.hpp src/boost/numeric/ublas/vector.hpp src/boost/numeric/ublas/vector_expression.hpp src/boost/numeric/ublas/vector_proxy.hpp src/boost/operators.hpp src/boost/optional.hpp src/boost/optional/optional.hpp src/boost/optional/optional_fwd.hpp src/boost/parameter/aux_/arg_list.hpp src/boost/parameter/aux_/default.hpp src/boost/parameter/aux_/is_maybe.hpp src/boost/parameter/aux_/parameter_requirements.hpp src/boost/parameter/aux_/parenthesized_type.hpp src/boost/parameter/aux_/result_of0.hpp src/boost/parameter/aux_/tag.hpp src/boost/parameter/aux_/tagged_argument.hpp src/boost/parameter/aux_/unwrap_cv_reference.hpp src/boost/parameter/aux_/void.hpp src/boost/parameter/aux_/yesno.hpp src/boost/parameter/binding.hpp src/boost/parameter/config.hpp src/boost/parameter/keyword.hpp src/boost/parameter/name.hpp src/boost/parameter/value_type.hpp src/boost/pending/container_traits.hpp src/boost/pending/cstddef.hpp src/boost/pending/detail/property.hpp src/boost/pending/indirect_cmp.hpp src/boost/pending/integer_log2.hpp src/boost/pending/is_heap.hpp src/boost/pending/lowest_bit.hpp src/boost/pending/mutable_heap.hpp src/boost/pending/mutable_queue.hpp src/boost/pending/property.hpp src/boost/pending/queue.hpp src/boost/pending/relaxed_heap.hpp src/boost/pointee.hpp src/boost/pointer_to_other.hpp src/boost/polygon/detail/boolean_op.hpp src/boost/polygon/detail/boolean_op_45.hpp src/boost/polygon/detail/iterator_compact_to_points.hpp src/boost/polygon/detail/iterator_geometry_to_set.hpp src/boost/polygon/detail/iterator_points_to_compact.hpp src/boost/polygon/detail/max_cover.hpp src/boost/polygon/detail/minkowski.hpp src/boost/polygon/detail/polygon_45_formation.hpp src/boost/polygon/detail/polygon_45_set_view.hpp src/boost/polygon/detail/polygon_45_touch.hpp src/boost/polygon/detail/polygon_90_set_view.hpp src/boost/polygon/detail/polygon_90_touch.hpp src/boost/polygon/detail/polygon_arbitrary_formation.hpp src/boost/polygon/detail/polygon_formation.hpp src/boost/polygon/detail/polygon_set_view.hpp src/boost/polygon/detail/polygon_simplify.hpp src/boost/polygon/detail/polygon_sort_adaptor.hpp src/boost/polygon/detail/property_merge.hpp src/boost/polygon/detail/property_merge_45.hpp src/boost/polygon/detail/rectangle_formation.hpp src/boost/polygon/detail/scan_arbitrary.hpp src/boost/polygon/detail/voronoi_ctypes.hpp src/boost/polygon/detail/voronoi_predicates.hpp src/boost/polygon/detail/voronoi_robust_fpt.hpp src/boost/polygon/detail/voronoi_structures.hpp src/boost/polygon/interval_concept.hpp src/boost/polygon/interval_data.hpp src/boost/polygon/interval_traits.hpp src/boost/polygon/isotropy.hpp src/boost/polygon/point_concept.hpp src/boost/polygon/point_data.hpp src/boost/polygon/point_traits.hpp src/boost/polygon/polygon.hpp src/boost/polygon/polygon_45_data.hpp src/boost/polygon/polygon_45_set_concept.hpp src/boost/polygon/polygon_45_set_data.hpp src/boost/polygon/polygon_45_set_traits.hpp src/boost/polygon/polygon_45_with_holes_data.hpp src/boost/polygon/polygon_90_data.hpp src/boost/polygon/polygon_90_set_concept.hpp src/boost/polygon/polygon_90_set_data.hpp src/boost/polygon/polygon_90_set_traits.hpp src/boost/polygon/polygon_90_with_holes_data.hpp src/boost/polygon/polygon_data.hpp src/boost/polygon/polygon_set_concept.hpp src/boost/polygon/polygon_set_data.hpp src/boost/polygon/polygon_set_traits.hpp src/boost/polygon/polygon_traits.hpp src/boost/polygon/polygon_with_holes_data.hpp src/boost/polygon/rectangle_concept.hpp src/boost/polygon/rectangle_data.hpp src/boost/polygon/rectangle_traits.hpp src/boost/polygon/segment_concept.hpp src/boost/polygon/segment_data.hpp src/boost/polygon/segment_traits.hpp src/boost/polygon/segment_utils.hpp src/boost/polygon/transform.hpp src/boost/polygon/voronoi.hpp src/boost/polygon/voronoi_builder.hpp src/boost/polygon/voronoi_diagram.hpp src/boost/polygon/voronoi_geometry_type.hpp src/boost/preprocessor.hpp src/boost/preprocessor/arithmetic.hpp src/boost/preprocessor/arithmetic/add.hpp src/boost/preprocessor/arithmetic/dec.hpp src/boost/preprocessor/arithmetic/detail/div_base.hpp src/boost/preprocessor/arithmetic/div.hpp src/boost/preprocessor/arithmetic/inc.hpp src/boost/preprocessor/arithmetic/mod.hpp src/boost/preprocessor/arithmetic/mul.hpp src/boost/preprocessor/arithmetic/sub.hpp src/boost/preprocessor/array.hpp src/boost/preprocessor/array/data.hpp src/boost/preprocessor/array/elem.hpp src/boost/preprocessor/array/enum.hpp src/boost/preprocessor/array/insert.hpp src/boost/preprocessor/array/pop_back.hpp src/boost/preprocessor/array/pop_front.hpp src/boost/preprocessor/array/push_back.hpp src/boost/preprocessor/array/push_front.hpp src/boost/preprocessor/array/remove.hpp src/boost/preprocessor/array/replace.hpp src/boost/preprocessor/array/reverse.hpp src/boost/preprocessor/array/size.hpp src/boost/preprocessor/array/to_list.hpp src/boost/preprocessor/array/to_seq.hpp src/boost/preprocessor/array/to_tuple.hpp src/boost/preprocessor/cat.hpp src/boost/preprocessor/comma_if.hpp src/boost/preprocessor/comparison.hpp src/boost/preprocessor/comparison/equal.hpp src/boost/preprocessor/comparison/greater.hpp src/boost/preprocessor/comparison/greater_equal.hpp src/boost/preprocessor/comparison/less.hpp src/boost/preprocessor/comparison/less_equal.hpp src/boost/preprocessor/comparison/not_equal.hpp src/boost/preprocessor/config/config.hpp src/boost/preprocessor/config/limits.hpp src/boost/preprocessor/control.hpp src/boost/preprocessor/control/deduce_d.hpp src/boost/preprocessor/control/detail/dmc/while.hpp src/boost/preprocessor/control/detail/edg/while.hpp src/boost/preprocessor/control/detail/msvc/while.hpp src/boost/preprocessor/control/detail/while.hpp src/boost/preprocessor/control/expr_if.hpp src/boost/preprocessor/control/expr_iif.hpp src/boost/preprocessor/control/if.hpp src/boost/preprocessor/control/iif.hpp src/boost/preprocessor/control/while.hpp src/boost/preprocessor/debug.hpp src/boost/preprocessor/debug/assert.hpp src/boost/preprocessor/debug/error.hpp src/boost/preprocessor/debug/line.hpp src/boost/preprocessor/dec.hpp src/boost/preprocessor/detail/auto_rec.hpp src/boost/preprocessor/detail/check.hpp src/boost/preprocessor/detail/dmc/auto_rec.hpp src/boost/preprocessor/detail/is_binary.hpp src/boost/preprocessor/detail/is_unary.hpp src/boost/preprocessor/detail/split.hpp src/boost/preprocessor/empty.hpp src/boost/preprocessor/enum.hpp src/boost/preprocessor/enum_params.hpp src/boost/preprocessor/enum_params_with_a_default.hpp src/boost/preprocessor/enum_params_with_defaults.hpp src/boost/preprocessor/enum_shifted_params.hpp src/boost/preprocessor/expr_if.hpp src/boost/preprocessor/facilities.hpp src/boost/preprocessor/facilities/apply.hpp src/boost/preprocessor/facilities/empty.hpp src/boost/preprocessor/facilities/expand.hpp src/boost/preprocessor/facilities/identity.hpp src/boost/preprocessor/facilities/intercept.hpp src/boost/preprocessor/facilities/overload.hpp src/boost/preprocessor/identity.hpp src/boost/preprocessor/if.hpp src/boost/preprocessor/inc.hpp src/boost/preprocessor/iterate.hpp src/boost/preprocessor/iteration.hpp src/boost/preprocessor/iteration/detail/bounds/lower1.hpp src/boost/preprocessor/iteration/detail/bounds/lower2.hpp src/boost/preprocessor/iteration/detail/bounds/lower3.hpp src/boost/preprocessor/iteration/detail/bounds/lower4.hpp src/boost/preprocessor/iteration/detail/bounds/lower5.hpp src/boost/preprocessor/iteration/detail/bounds/upper1.hpp src/boost/preprocessor/iteration/detail/bounds/upper2.hpp src/boost/preprocessor/iteration/detail/bounds/upper3.hpp src/boost/preprocessor/iteration/detail/bounds/upper4.hpp src/boost/preprocessor/iteration/detail/bounds/upper5.hpp src/boost/preprocessor/iteration/detail/finish.hpp src/boost/preprocessor/iteration/detail/iter/forward1.hpp src/boost/preprocessor/iteration/detail/iter/forward2.hpp src/boost/preprocessor/iteration/detail/iter/forward3.hpp src/boost/preprocessor/iteration/detail/iter/forward4.hpp src/boost/preprocessor/iteration/detail/iter/forward5.hpp src/boost/preprocessor/iteration/detail/iter/reverse1.hpp src/boost/preprocessor/iteration/detail/iter/reverse2.hpp src/boost/preprocessor/iteration/detail/iter/reverse3.hpp src/boost/preprocessor/iteration/detail/iter/reverse4.hpp src/boost/preprocessor/iteration/detail/iter/reverse5.hpp src/boost/preprocessor/iteration/detail/local.hpp src/boost/preprocessor/iteration/detail/rlocal.hpp src/boost/preprocessor/iteration/detail/self.hpp src/boost/preprocessor/iteration/detail/start.hpp src/boost/preprocessor/iteration/iterate.hpp src/boost/preprocessor/iteration/local.hpp src/boost/preprocessor/iteration/self.hpp src/boost/preprocessor/library.hpp src/boost/preprocessor/list.hpp src/boost/preprocessor/list/adt.hpp src/boost/preprocessor/list/append.hpp src/boost/preprocessor/list/at.hpp src/boost/preprocessor/list/cat.hpp src/boost/preprocessor/list/detail/dmc/fold_left.hpp src/boost/preprocessor/list/detail/edg/fold_left.hpp src/boost/preprocessor/list/detail/edg/fold_right.hpp src/boost/preprocessor/list/detail/fold_left.hpp src/boost/preprocessor/list/detail/fold_right.hpp src/boost/preprocessor/list/enum.hpp src/boost/preprocessor/list/filter.hpp src/boost/preprocessor/list/first_n.hpp src/boost/preprocessor/list/fold_left.hpp src/boost/preprocessor/list/fold_right.hpp src/boost/preprocessor/list/for_each.hpp src/boost/preprocessor/list/for_each_i.hpp src/boost/preprocessor/list/for_each_product.hpp src/boost/preprocessor/list/rest_n.hpp src/boost/preprocessor/list/reverse.hpp src/boost/preprocessor/list/size.hpp src/boost/preprocessor/list/to_array.hpp src/boost/preprocessor/list/to_seq.hpp src/boost/preprocessor/list/to_tuple.hpp src/boost/preprocessor/list/transform.hpp src/boost/preprocessor/logical.hpp src/boost/preprocessor/logical/and.hpp src/boost/preprocessor/logical/bitand.hpp src/boost/preprocessor/logical/bitnor.hpp src/boost/preprocessor/logical/bitor.hpp src/boost/preprocessor/logical/bitxor.hpp src/boost/preprocessor/logical/bool.hpp src/boost/preprocessor/logical/compl.hpp src/boost/preprocessor/logical/nor.hpp src/boost/preprocessor/logical/not.hpp src/boost/preprocessor/logical/or.hpp src/boost/preprocessor/logical/xor.hpp src/boost/preprocessor/punctuation.hpp src/boost/preprocessor/punctuation/comma.hpp src/boost/preprocessor/punctuation/comma_if.hpp src/boost/preprocessor/punctuation/paren.hpp src/boost/preprocessor/punctuation/paren_if.hpp src/boost/preprocessor/repeat.hpp src/boost/preprocessor/repeat_from_to.hpp src/boost/preprocessor/repetition.hpp src/boost/preprocessor/repetition/deduce_r.hpp src/boost/preprocessor/repetition/deduce_z.hpp src/boost/preprocessor/repetition/detail/dmc/for.hpp src/boost/preprocessor/repetition/detail/edg/for.hpp src/boost/preprocessor/repetition/detail/for.hpp src/boost/preprocessor/repetition/detail/msvc/for.hpp src/boost/preprocessor/repetition/enum.hpp src/boost/preprocessor/repetition/enum_binary_params.hpp src/boost/preprocessor/repetition/enum_params.hpp src/boost/preprocessor/repetition/enum_params_with_a_default.hpp src/boost/preprocessor/repetition/enum_params_with_defaults.hpp src/boost/preprocessor/repetition/enum_shifted.hpp src/boost/preprocessor/repetition/enum_shifted_binary_params.hpp src/boost/preprocessor/repetition/enum_shifted_params.hpp src/boost/preprocessor/repetition/enum_trailing.hpp src/boost/preprocessor/repetition/enum_trailing_binary_params.hpp src/boost/preprocessor/repetition/enum_trailing_params.hpp src/boost/preprocessor/repetition/for.hpp src/boost/preprocessor/repetition/repeat.hpp src/boost/preprocessor/repetition/repeat_from_to.hpp src/boost/preprocessor/selection.hpp src/boost/preprocessor/selection/max.hpp src/boost/preprocessor/selection/min.hpp src/boost/preprocessor/seq.hpp src/boost/preprocessor/seq/cat.hpp src/boost/preprocessor/seq/detail/binary_transform.hpp src/boost/preprocessor/seq/detail/split.hpp src/boost/preprocessor/seq/elem.hpp src/boost/preprocessor/seq/enum.hpp src/boost/preprocessor/seq/filter.hpp src/boost/preprocessor/seq/first_n.hpp src/boost/preprocessor/seq/fold_left.hpp src/boost/preprocessor/seq/fold_right.hpp src/boost/preprocessor/seq/for_each.hpp src/boost/preprocessor/seq/for_each_i.hpp src/boost/preprocessor/seq/for_each_product.hpp src/boost/preprocessor/seq/insert.hpp src/boost/preprocessor/seq/pop_back.hpp src/boost/preprocessor/seq/pop_front.hpp src/boost/preprocessor/seq/push_back.hpp src/boost/preprocessor/seq/push_front.hpp src/boost/preprocessor/seq/remove.hpp src/boost/preprocessor/seq/replace.hpp src/boost/preprocessor/seq/rest_n.hpp src/boost/preprocessor/seq/reverse.hpp src/boost/preprocessor/seq/seq.hpp src/boost/preprocessor/seq/size.hpp src/boost/preprocessor/seq/subseq.hpp src/boost/preprocessor/seq/to_array.hpp src/boost/preprocessor/seq/to_list.hpp src/boost/preprocessor/seq/to_tuple.hpp src/boost/preprocessor/seq/transform.hpp src/boost/preprocessor/slot.hpp src/boost/preprocessor/slot/detail/counter.hpp src/boost/preprocessor/slot/detail/def.hpp src/boost/preprocessor/slot/detail/shared.hpp src/boost/preprocessor/slot/detail/slot1.hpp src/boost/preprocessor/slot/detail/slot2.hpp src/boost/preprocessor/slot/detail/slot3.hpp src/boost/preprocessor/slot/detail/slot4.hpp src/boost/preprocessor/slot/detail/slot5.hpp src/boost/preprocessor/slot/slot.hpp src/boost/preprocessor/stringize.hpp src/boost/preprocessor/tuple.hpp src/boost/preprocessor/tuple/eat.hpp src/boost/preprocessor/tuple/elem.hpp src/boost/preprocessor/tuple/enum.hpp src/boost/preprocessor/tuple/rem.hpp src/boost/preprocessor/tuple/reverse.hpp src/boost/preprocessor/tuple/size.hpp src/boost/preprocessor/tuple/to_array.hpp src/boost/preprocessor/tuple/to_list.hpp src/boost/preprocessor/tuple/to_seq.hpp src/boost/preprocessor/variadic.hpp src/boost/preprocessor/variadic/elem.hpp src/boost/preprocessor/variadic/size.hpp src/boost/preprocessor/variadic/to_array.hpp src/boost/preprocessor/variadic/to_list.hpp src/boost/preprocessor/variadic/to_seq.hpp src/boost/preprocessor/variadic/to_tuple.hpp src/boost/program_options.hpp src/boost/program_options/cmdline.hpp src/boost/program_options/config.hpp src/boost/program_options/detail/cmdline.hpp src/boost/program_options/detail/config_file.hpp src/boost/program_options/detail/convert.hpp src/boost/program_options/detail/parsers.hpp src/boost/program_options/detail/utf8_codecvt_facet.hpp src/boost/program_options/detail/value_semantic.hpp src/boost/program_options/environment_iterator.hpp src/boost/program_options/eof_iterator.hpp src/boost/program_options/errors.hpp src/boost/program_options/option.hpp src/boost/program_options/options_description.hpp src/boost/program_options/parsers.hpp src/boost/program_options/positional_options.hpp src/boost/program_options/value_semantic.hpp src/boost/program_options/variables_map.hpp src/boost/program_options/version.hpp src/boost/progress.hpp src/boost/property_map/parallel/caching_property_map.hpp src/boost/property_map/parallel/distributed_property_map.hpp src/boost/property_map/parallel/impl/distributed_property_map.ipp src/boost/property_map/parallel/local_property_map.hpp src/boost/property_map/property_map.hpp src/boost/property_map/property_map_iterator.hpp src/boost/property_map/shared_array_property_map.hpp src/boost/property_map/vector_property_map.hpp src/boost/python.hpp src/boost/python/arg_from_python.hpp src/boost/python/args.hpp src/boost/python/args_fwd.hpp src/boost/python/back_reference.hpp src/boost/python/base_type_traits.hpp src/boost/python/bases.hpp src/boost/python/borrowed.hpp src/boost/python/call.hpp src/boost/python/call_method.hpp src/boost/python/cast.hpp src/boost/python/class.hpp src/boost/python/class_fwd.hpp src/boost/python/converter/arg_from_python.hpp src/boost/python/converter/arg_to_python.hpp src/boost/python/converter/arg_to_python_base.hpp src/boost/python/converter/as_to_python_function.hpp src/boost/python/converter/builtin_converters.hpp src/boost/python/converter/constructor_function.hpp src/boost/python/converter/context_result_converter.hpp src/boost/python/converter/convertible_function.hpp src/boost/python/converter/from_python.hpp src/boost/python/converter/implicit.hpp src/boost/python/converter/obj_mgr_arg_from_python.hpp src/boost/python/converter/object_manager.hpp src/boost/python/converter/pointer_type_id.hpp src/boost/python/converter/pyobject_traits.hpp src/boost/python/converter/pyobject_type.hpp src/boost/python/converter/pytype_function.hpp src/boost/python/converter/pytype_object_mgr_traits.hpp src/boost/python/converter/registered.hpp src/boost/python/converter/registered_pointee.hpp src/boost/python/converter/registrations.hpp src/boost/python/converter/registry.hpp src/boost/python/converter/return_from_python.hpp src/boost/python/converter/rvalue_from_python_data.hpp src/boost/python/converter/shared_ptr_deleter.hpp src/boost/python/converter/shared_ptr_from_python.hpp src/boost/python/converter/shared_ptr_to_python.hpp src/boost/python/converter/to_python_function_type.hpp src/boost/python/copy_const_reference.hpp src/boost/python/copy_non_const_reference.hpp src/boost/python/data_members.hpp src/boost/python/def.hpp src/boost/python/def_visitor.hpp src/boost/python/default_call_policies.hpp src/boost/python/detail/borrowed_ptr.hpp src/boost/python/detail/caller.hpp src/boost/python/detail/config.hpp src/boost/python/detail/construct.hpp src/boost/python/detail/convertible.hpp src/boost/python/detail/copy_ctor_mutates_rhs.hpp src/boost/python/detail/cv_category.hpp src/boost/python/detail/dealloc.hpp src/boost/python/detail/decorated_type_id.hpp src/boost/python/detail/decref_guard.hpp src/boost/python/detail/def_helper.hpp src/boost/python/detail/def_helper_fwd.hpp src/boost/python/detail/defaults_def.hpp src/boost/python/detail/defaults_gen.hpp src/boost/python/detail/dependent.hpp src/boost/python/detail/destroy.hpp src/boost/python/detail/exception_handler.hpp src/boost/python/detail/force_instantiate.hpp src/boost/python/detail/indirect_traits.hpp src/boost/python/detail/invoke.hpp src/boost/python/detail/is_auto_ptr.hpp src/boost/python/detail/is_wrapper.hpp src/boost/python/detail/is_xxx.hpp src/boost/python/detail/make_keyword_range_fn.hpp src/boost/python/detail/make_tuple.hpp src/boost/python/detail/map_entry.hpp src/boost/python/detail/mpl_lambda.hpp src/boost/python/detail/msvc_typeinfo.hpp src/boost/python/detail/none.hpp src/boost/python/detail/not_specified.hpp src/boost/python/detail/nullary_function_adaptor.hpp src/boost/python/detail/operator_id.hpp src/boost/python/detail/overloads_fwd.hpp src/boost/python/detail/prefix.hpp src/boost/python/detail/preprocessor.hpp src/boost/python/detail/python22_fixed.h src/boost/python/detail/python_type.hpp src/boost/python/detail/raw_pyobject.hpp src/boost/python/detail/referent_storage.hpp src/boost/python/detail/scope.hpp src/boost/python/detail/sfinae.hpp src/boost/python/detail/signature.hpp src/boost/python/detail/string_literal.hpp src/boost/python/detail/target.hpp src/boost/python/detail/translate_exception.hpp src/boost/python/detail/type_list.hpp src/boost/python/detail/type_list_impl.hpp src/boost/python/detail/type_list_impl_no_pts.hpp src/boost/python/detail/unwind_type.hpp src/boost/python/detail/unwrap_type_id.hpp src/boost/python/detail/unwrap_wrapper.hpp src/boost/python/detail/value_arg.hpp src/boost/python/detail/value_is_shared_ptr.hpp src/boost/python/detail/value_is_xxx.hpp src/boost/python/detail/void_ptr.hpp src/boost/python/detail/void_return.hpp src/boost/python/detail/wrap_python.hpp src/boost/python/detail/wrapper_base.hpp src/boost/python/dict.hpp src/boost/python/docstring_options.hpp src/boost/python/enum.hpp src/boost/python/errors.hpp src/boost/python/exception_translator.hpp src/boost/python/exec.hpp src/boost/python/extract.hpp src/boost/python/handle.hpp src/boost/python/handle_fwd.hpp src/boost/python/has_back_reference.hpp src/boost/python/implicit.hpp src/boost/python/import.hpp src/boost/python/init.hpp src/boost/python/instance_holder.hpp src/boost/python/iterator.hpp src/boost/python/list.hpp src/boost/python/long.hpp src/boost/python/lvalue_from_pytype.hpp src/boost/python/make_constructor.hpp src/boost/python/make_function.hpp src/boost/python/manage_new_object.hpp src/boost/python/module.hpp src/boost/python/module_init.hpp src/boost/python/numeric.hpp src/boost/python/object.hpp src/boost/python/object/add_to_namespace.hpp src/boost/python/object/class.hpp src/boost/python/object/class_detail.hpp src/boost/python/object/class_metadata.hpp src/boost/python/object/class_wrapper.hpp src/boost/python/object/enum_base.hpp src/boost/python/object/find_instance.hpp src/boost/python/object/forward.hpp src/boost/python/object/function.hpp src/boost/python/object/function_doc_signature.hpp src/boost/python/object/function_handle.hpp src/boost/python/object/function_object.hpp src/boost/python/object/inheritance.hpp src/boost/python/object/inheritance_query.hpp src/boost/python/object/instance.hpp src/boost/python/object/iterator.hpp src/boost/python/object/iterator_core.hpp src/boost/python/object/life_support.hpp src/boost/python/object/make_holder.hpp src/boost/python/object/make_instance.hpp src/boost/python/object/make_ptr_instance.hpp src/boost/python/object/pickle_support.hpp src/boost/python/object/pointer_holder.hpp src/boost/python/object/py_function.hpp src/boost/python/object/stl_iterator_core.hpp src/boost/python/object/value_holder.hpp src/boost/python/object/value_holder_fwd.hpp src/boost/python/object_attributes.hpp src/boost/python/object_call.hpp src/boost/python/object_core.hpp src/boost/python/object_fwd.hpp src/boost/python/object_items.hpp src/boost/python/object_operators.hpp src/boost/python/object_protocol.hpp src/boost/python/object_protocol_core.hpp src/boost/python/object_slices.hpp src/boost/python/opaque_pointer_converter.hpp src/boost/python/operators.hpp src/boost/python/other.hpp src/boost/python/overloads.hpp src/boost/python/override.hpp src/boost/python/pointee.hpp src/boost/python/proxy.hpp src/boost/python/ptr.hpp src/boost/python/pure_virtual.hpp src/boost/python/refcount.hpp src/boost/python/reference_existing_object.hpp src/boost/python/register_ptr_to_python.hpp src/boost/python/return_arg.hpp src/boost/python/return_by_value.hpp src/boost/python/return_internal_reference.hpp src/boost/python/return_opaque_pointer.hpp src/boost/python/return_value_policy.hpp src/boost/python/scope.hpp src/boost/python/self.hpp src/boost/python/signature.hpp src/boost/python/slice.hpp src/boost/python/slice_nil.hpp src/boost/python/ssize_t.hpp src/boost/python/stl_iterator.hpp src/boost/python/str.hpp src/boost/python/suite/indexing/container_utils.hpp src/boost/python/suite/indexing/detail/indexing_suite_detail.hpp src/boost/python/suite/indexing/indexing_suite.hpp src/boost/python/suite/indexing/vector_indexing_suite.hpp src/boost/python/tag.hpp src/boost/python/to_python_converter.hpp src/boost/python/to_python_indirect.hpp src/boost/python/to_python_value.hpp src/boost/python/tuple.hpp src/boost/python/type_id.hpp src/boost/python/with_custodian_and_ward.hpp src/boost/python/wrapper.hpp src/boost/random.hpp src/boost/random/additive_combine.hpp src/boost/random/bernoulli_distribution.hpp src/boost/random/binomial_distribution.hpp src/boost/random/cauchy_distribution.hpp src/boost/random/chi_squared_distribution.hpp src/boost/random/detail/config.hpp src/boost/random/detail/const_mod.hpp src/boost/random/detail/disable_warnings.hpp src/boost/random/detail/enable_warnings.hpp src/boost/random/detail/generator_bits.hpp src/boost/random/detail/generator_seed_seq.hpp src/boost/random/detail/integer_log2.hpp src/boost/random/detail/large_arithmetic.hpp src/boost/random/detail/operators.hpp src/boost/random/detail/ptr_helper.hpp src/boost/random/detail/seed.hpp src/boost/random/detail/seed_impl.hpp src/boost/random/detail/signed_unsigned_tools.hpp src/boost/random/detail/uniform_int_float.hpp src/boost/random/detail/vector_io.hpp src/boost/random/discard_block.hpp src/boost/random/discrete_distribution.hpp src/boost/random/exponential_distribution.hpp src/boost/random/extreme_value_distribution.hpp src/boost/random/fisher_f_distribution.hpp src/boost/random/gamma_distribution.hpp src/boost/random/generate_canonical.hpp src/boost/random/geometric_distribution.hpp src/boost/random/independent_bits.hpp src/boost/random/inversive_congruential.hpp src/boost/random/lagged_fibonacci.hpp src/boost/random/linear_congruential.hpp src/boost/random/linear_feedback_shift.hpp src/boost/random/lognormal_distribution.hpp src/boost/random/mersenne_twister.hpp src/boost/random/negative_binomial_distribution.hpp src/boost/random/normal_distribution.hpp src/boost/random/piecewise_constant_distribution.hpp src/boost/random/piecewise_linear_distribution.hpp src/boost/random/poisson_distribution.hpp src/boost/random/random_number_generator.hpp src/boost/random/ranlux.hpp src/boost/random/seed_seq.hpp src/boost/random/shuffle_order.hpp src/boost/random/shuffle_output.hpp src/boost/random/student_t_distribution.hpp src/boost/random/subtract_with_carry.hpp src/boost/random/taus88.hpp src/boost/random/triangle_distribution.hpp src/boost/random/uniform_01.hpp src/boost/random/uniform_int.hpp src/boost/random/uniform_int_distribution.hpp src/boost/random/uniform_on_sphere.hpp src/boost/random/uniform_real.hpp src/boost/random/uniform_real_distribution.hpp src/boost/random/uniform_smallint.hpp src/boost/random/variate_generator.hpp src/boost/random/weibull_distribution.hpp src/boost/random/xor_combine.hpp src/boost/range.hpp src/boost/range/adaptor/adjacent_filtered.hpp src/boost/range/adaptor/argument_fwd.hpp src/boost/range/adaptor/filtered.hpp src/boost/range/adaptor/reversed.hpp src/boost/range/adaptor/sliced.hpp src/boost/range/adaptor/strided.hpp src/boost/range/adaptor/uniqued.hpp src/boost/range/algorithm/copy.hpp src/boost/range/algorithm/equal.hpp src/boost/range/algorithm/reverse.hpp src/boost/range/as_literal.hpp src/boost/range/begin.hpp src/boost/range/category.hpp src/boost/range/concepts.hpp src/boost/range/config.hpp src/boost/range/const_iterator.hpp src/boost/range/const_reverse_iterator.hpp src/boost/range/detail/as_literal.hpp src/boost/range/detail/begin.hpp src/boost/range/detail/collection_traits.hpp src/boost/range/detail/collection_traits_detail.hpp src/boost/range/detail/common.hpp src/boost/range/detail/const_iterator.hpp src/boost/range/detail/detail_str.hpp src/boost/range/detail/end.hpp src/boost/range/detail/extract_optional_type.hpp src/boost/range/detail/implementation_help.hpp src/boost/range/detail/iterator.hpp src/boost/range/detail/misc_concept.hpp src/boost/range/detail/range_return.hpp src/boost/range/detail/remove_extent.hpp src/boost/range/detail/safe_bool.hpp src/boost/range/detail/sfinae.hpp src/boost/range/detail/size_type.hpp src/boost/range/detail/str_types.hpp src/boost/range/detail/value_type.hpp src/boost/range/detail/vc6/end.hpp src/boost/range/difference_type.hpp src/boost/range/distance.hpp src/boost/range/empty.hpp src/boost/range/end.hpp src/boost/range/functions.hpp src/boost/range/has_range_iterator.hpp src/boost/range/irange.hpp src/boost/range/iterator.hpp src/boost/range/iterator_range.hpp src/boost/range/iterator_range_core.hpp src/boost/range/iterator_range_io.hpp src/boost/range/metafunctions.hpp src/boost/range/mutable_iterator.hpp src/boost/range/pointer.hpp src/boost/range/rbegin.hpp src/boost/range/reference.hpp src/boost/range/rend.hpp src/boost/range/result_iterator.hpp src/boost/range/reverse_iterator.hpp src/boost/range/reverse_result_iterator.hpp src/boost/range/size.hpp src/boost/range/size_type.hpp src/boost/range/sub_range.hpp src/boost/range/value_type.hpp src/boost/rational.hpp src/boost/ref.hpp src/boost/scoped_array.hpp src/boost/scoped_ptr.hpp src/boost/serialization/access.hpp src/boost/serialization/array.hpp src/boost/serialization/assume_abstract.hpp src/boost/serialization/base_object.hpp src/boost/serialization/collection_size_type.hpp src/boost/serialization/collection_traits.hpp src/boost/serialization/collections_load_imp.hpp src/boost/serialization/collections_save_imp.hpp src/boost/serialization/config.hpp src/boost/serialization/detail/get_data.hpp src/boost/serialization/detail/shared_count_132.hpp src/boost/serialization/detail/shared_ptr_132.hpp src/boost/serialization/detail/shared_ptr_nmt_132.hpp src/boost/serialization/detail/stack_constructor.hpp src/boost/serialization/extended_type_info.hpp src/boost/serialization/extended_type_info_no_rtti.hpp src/boost/serialization/extended_type_info_typeid.hpp src/boost/serialization/factory.hpp src/boost/serialization/force_include.hpp src/boost/serialization/is_bitwise_serializable.hpp src/boost/serialization/item_version_type.hpp src/boost/serialization/level.hpp src/boost/serialization/level_enum.hpp src/boost/serialization/nvp.hpp src/boost/serialization/pfto.hpp src/boost/serialization/serialization.hpp src/boost/serialization/shared_ptr_132.hpp src/boost/serialization/singleton.hpp src/boost/serialization/smart_cast.hpp src/boost/serialization/split_free.hpp src/boost/serialization/split_member.hpp src/boost/serialization/state_saver.hpp src/boost/serialization/static_warning.hpp src/boost/serialization/string.hpp src/boost/serialization/strong_typedef.hpp src/boost/serialization/throw_exception.hpp src/boost/serialization/tracking.hpp src/boost/serialization/tracking_enum.hpp src/boost/serialization/traits.hpp src/boost/serialization/type_info_implementation.hpp src/boost/serialization/utility.hpp src/boost/serialization/vector.hpp src/boost/serialization/version.hpp src/boost/serialization/void_cast.hpp src/boost/serialization/void_cast_fwd.hpp src/boost/serialization/wrapper.hpp src/boost/shared_array.hpp src/boost/shared_ptr.hpp src/boost/smart_ptr.hpp src/boost/smart_ptr/allocate_shared_array.hpp src/boost/smart_ptr/bad_weak_ptr.hpp src/boost/smart_ptr/detail/allocate_array_helper.hpp src/boost/smart_ptr/detail/array_deleter.hpp src/boost/smart_ptr/detail/array_traits.hpp src/boost/smart_ptr/detail/array_utility.hpp src/boost/smart_ptr/detail/atomic_count.hpp src/boost/smart_ptr/detail/atomic_count_gcc.hpp src/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp src/boost/smart_ptr/detail/atomic_count_pthreads.hpp src/boost/smart_ptr/detail/atomic_count_sync.hpp src/boost/smart_ptr/detail/atomic_count_win32.hpp src/boost/smart_ptr/detail/lightweight_mutex.hpp src/boost/smart_ptr/detail/lwm_nop.hpp src/boost/smart_ptr/detail/lwm_pthreads.hpp src/boost/smart_ptr/detail/lwm_win32_cs.hpp src/boost/smart_ptr/detail/make_array_helper.hpp src/boost/smart_ptr/detail/operator_bool.hpp src/boost/smart_ptr/detail/quick_allocator.hpp src/boost/smart_ptr/detail/shared_array_nmt.hpp src/boost/smart_ptr/detail/shared_count.hpp src/boost/smart_ptr/detail/shared_ptr_nmt.hpp src/boost/smart_ptr/detail/sp_convertible.hpp src/boost/smart_ptr/detail/sp_counted_base.hpp src/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp src/boost/smart_ptr/detail/sp_counted_base_aix.hpp src/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp src/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp src/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp src/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp src/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp src/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp src/boost/smart_ptr/detail/sp_counted_base_nt.hpp src/boost/smart_ptr/detail/sp_counted_base_pt.hpp src/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp src/boost/smart_ptr/detail/sp_counted_base_spin.hpp src/boost/smart_ptr/detail/sp_counted_base_sync.hpp src/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp src/boost/smart_ptr/detail/sp_counted_base_w32.hpp src/boost/smart_ptr/detail/sp_counted_impl.hpp src/boost/smart_ptr/detail/sp_forward.hpp src/boost/smart_ptr/detail/sp_has_sync.hpp src/boost/smart_ptr/detail/sp_if_array.hpp src/boost/smart_ptr/detail/sp_nullptr_t.hpp src/boost/smart_ptr/detail/spinlock.hpp src/boost/smart_ptr/detail/spinlock_gcc_arm.hpp src/boost/smart_ptr/detail/spinlock_nt.hpp src/boost/smart_ptr/detail/spinlock_pool.hpp src/boost/smart_ptr/detail/spinlock_pt.hpp src/boost/smart_ptr/detail/spinlock_sync.hpp src/boost/smart_ptr/detail/spinlock_w32.hpp src/boost/smart_ptr/detail/yield_k.hpp src/boost/smart_ptr/enable_shared_from_this.hpp src/boost/smart_ptr/intrusive_ptr.hpp src/boost/smart_ptr/make_shared.hpp src/boost/smart_ptr/make_shared_array.hpp src/boost/smart_ptr/make_shared_object.hpp src/boost/smart_ptr/scoped_array.hpp src/boost/smart_ptr/scoped_ptr.hpp src/boost/smart_ptr/shared_array.hpp src/boost/smart_ptr/shared_ptr.hpp src/boost/smart_ptr/weak_ptr.hpp src/boost/spirit/home/classic/core/assert.hpp src/boost/spirit/home/classic/core/composite/actions.hpp src/boost/spirit/home/classic/core/composite/alternative.hpp src/boost/spirit/home/classic/core/composite/composite.hpp src/boost/spirit/home/classic/core/composite/difference.hpp src/boost/spirit/home/classic/core/composite/directives.hpp src/boost/spirit/home/classic/core/composite/exclusive_or.hpp src/boost/spirit/home/classic/core/composite/impl/alternative.ipp src/boost/spirit/home/classic/core/composite/impl/difference.ipp src/boost/spirit/home/classic/core/composite/impl/directives.ipp src/boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp src/boost/spirit/home/classic/core/composite/impl/intersection.ipp src/boost/spirit/home/classic/core/composite/impl/kleene_star.ipp src/boost/spirit/home/classic/core/composite/impl/list.ipp src/boost/spirit/home/classic/core/composite/impl/optional.ipp src/boost/spirit/home/classic/core/composite/impl/positive.ipp src/boost/spirit/home/classic/core/composite/impl/sequence.ipp src/boost/spirit/home/classic/core/composite/impl/sequential_and.ipp src/boost/spirit/home/classic/core/composite/impl/sequential_or.ipp src/boost/spirit/home/classic/core/composite/intersection.hpp src/boost/spirit/home/classic/core/composite/kleene_star.hpp src/boost/spirit/home/classic/core/composite/list.hpp src/boost/spirit/home/classic/core/composite/operators.hpp src/boost/spirit/home/classic/core/composite/optional.hpp src/boost/spirit/home/classic/core/composite/positive.hpp src/boost/spirit/home/classic/core/composite/sequence.hpp src/boost/spirit/home/classic/core/composite/sequential_and.hpp src/boost/spirit/home/classic/core/composite/sequential_or.hpp src/boost/spirit/home/classic/core/config.hpp src/boost/spirit/home/classic/core/impl/match.ipp src/boost/spirit/home/classic/core/impl/match_attr_traits.ipp src/boost/spirit/home/classic/core/impl/parser.ipp src/boost/spirit/home/classic/core/match.hpp src/boost/spirit/home/classic/core/nil.hpp src/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp src/boost/spirit/home/classic/core/non_terminal/parser_context.hpp src/boost/spirit/home/classic/core/non_terminal/parser_id.hpp src/boost/spirit/home/classic/core/non_terminal/rule.hpp src/boost/spirit/home/classic/core/parser.hpp src/boost/spirit/home/classic/core/primitives/impl/numerics.ipp src/boost/spirit/home/classic/core/primitives/impl/primitives.ipp src/boost/spirit/home/classic/core/primitives/numerics.hpp src/boost/spirit/home/classic/core/primitives/numerics_fwd.hpp src/boost/spirit/home/classic/core/primitives/primitives.hpp src/boost/spirit/home/classic/core/safe_bool.hpp src/boost/spirit/home/classic/core/scanner/impl/skipper.ipp src/boost/spirit/home/classic/core/scanner/scanner.hpp src/boost/spirit/home/classic/core/scanner/scanner_fwd.hpp src/boost/spirit/home/classic/core/scanner/skipper.hpp src/boost/spirit/home/classic/core/scanner/skipper_fwd.hpp src/boost/spirit/home/classic/debug.hpp src/boost/spirit/home/classic/debug/debug_node.hpp src/boost/spirit/home/classic/debug/minimal.hpp src/boost/spirit/home/classic/meta/as_parser.hpp src/boost/spirit/home/classic/namespace.hpp src/boost/spirit/home/classic/utility/chset.hpp src/boost/spirit/home/classic/utility/chset_operators.hpp src/boost/spirit/home/classic/utility/impl/chset.ipp src/boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp src/boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp src/boost/spirit/home/classic/utility/impl/chset/range_run.hpp src/boost/spirit/home/classic/utility/impl/chset/range_run.ipp src/boost/spirit/home/classic/utility/impl/chset_operators.ipp src/boost/spirit/home/classic/version.hpp src/boost/spirit/include/classic_actions.hpp src/boost/spirit/include/classic_chset.hpp src/boost/spirit/include/classic_numerics.hpp src/boost/spirit/include/classic_operators.hpp src/boost/spirit/include/classic_rule.hpp src/boost/static_assert.hpp src/boost/swap.hpp src/boost/test/debug.hpp src/boost/test/debug_config.hpp src/boost/test/detail/config.hpp src/boost/test/detail/enable_warnings.hpp src/boost/test/detail/fwd_decl.hpp src/boost/test/detail/global_typedef.hpp src/boost/test/detail/log_level.hpp src/boost/test/detail/suppress_warnings.hpp src/boost/test/detail/unit_test_parameters.hpp src/boost/test/detail/workaround.hpp src/boost/test/execution_monitor.hpp src/boost/test/floating_point_comparison.hpp src/boost/test/framework.hpp src/boost/test/impl/compiler_log_formatter.ipp src/boost/test/impl/cpp_main.ipp src/boost/test/impl/debug.ipp src/boost/test/impl/exception_safety.ipp src/boost/test/impl/execution_monitor.ipp src/boost/test/impl/framework.ipp src/boost/test/impl/interaction_based.ipp src/boost/test/impl/logged_expectations.ipp src/boost/test/impl/plain_report_formatter.ipp src/boost/test/impl/progress_monitor.ipp src/boost/test/impl/results_collector.ipp src/boost/test/impl/results_reporter.ipp src/boost/test/impl/test_main.ipp src/boost/test/impl/test_tools.ipp src/boost/test/impl/unit_test_log.ipp src/boost/test/impl/unit_test_main.ipp src/boost/test/impl/unit_test_monitor.ipp src/boost/test/impl/unit_test_parameters.ipp src/boost/test/impl/unit_test_suite.ipp src/boost/test/impl/xml_log_formatter.ipp src/boost/test/impl/xml_report_formatter.ipp src/boost/test/included/test_exec_monitor.hpp src/boost/test/interaction_based.hpp src/boost/test/mock_object.hpp src/boost/test/output/compiler_log_formatter.hpp src/boost/test/output/plain_report_formatter.hpp src/boost/test/output/xml_log_formatter.hpp src/boost/test/output/xml_report_formatter.hpp src/boost/test/output_test_stream.hpp src/boost/test/predicate_result.hpp src/boost/test/progress_monitor.hpp src/boost/test/results_collector.hpp src/boost/test/results_reporter.hpp src/boost/test/test_exec_monitor.hpp src/boost/test/test_observer.hpp src/boost/test/test_tools.hpp src/boost/test/unit_test_log.hpp src/boost/test/unit_test_log_formatter.hpp src/boost/test/unit_test_monitor.hpp src/boost/test/unit_test_suite.hpp src/boost/test/unit_test_suite_impl.hpp src/boost/test/utils/algorithm.hpp src/boost/test/utils/assign_op.hpp src/boost/test/utils/basic_cstring/basic_cstring.hpp src/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp src/boost/test/utils/basic_cstring/bcs_char_traits.hpp src/boost/test/utils/basic_cstring/compare.hpp src/boost/test/utils/basic_cstring/io.hpp src/boost/test/utils/callback.hpp src/boost/test/utils/class_properties.hpp src/boost/test/utils/custom_manip.hpp src/boost/test/utils/fixed_mapping.hpp src/boost/test/utils/foreach.hpp src/boost/test/utils/iterator/input_iterator_facade.hpp src/boost/test/utils/iterator/token_iterator.hpp src/boost/test/utils/lazy_ostream.hpp src/boost/test/utils/named_params.hpp src/boost/test/utils/rtti.hpp src/boost/test/utils/runtime/argument.hpp src/boost/test/utils/runtime/cla/argument_factory.hpp src/boost/test/utils/runtime/cla/argv_traverser.hpp src/boost/test/utils/runtime/cla/argv_traverser.ipp src/boost/test/utils/runtime/cla/basic_parameter.hpp src/boost/test/utils/runtime/cla/char_parameter.hpp src/boost/test/utils/runtime/cla/char_parameter.ipp src/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp src/boost/test/utils/runtime/cla/dual_name_parameter.hpp src/boost/test/utils/runtime/cla/dual_name_parameter.ipp src/boost/test/utils/runtime/cla/fwd.hpp src/boost/test/utils/runtime/cla/id_policy.hpp src/boost/test/utils/runtime/cla/id_policy.ipp src/boost/test/utils/runtime/cla/iface/argument_factory.hpp src/boost/test/utils/runtime/cla/iface/id_policy.hpp src/boost/test/utils/runtime/cla/modifier.hpp src/boost/test/utils/runtime/cla/named_parameter.hpp src/boost/test/utils/runtime/cla/named_parameter.ipp src/boost/test/utils/runtime/cla/parameter.hpp src/boost/test/utils/runtime/cla/parser.hpp src/boost/test/utils/runtime/cla/parser.ipp src/boost/test/utils/runtime/cla/typed_parameter.hpp src/boost/test/utils/runtime/cla/validation.hpp src/boost/test/utils/runtime/cla/validation.ipp src/boost/test/utils/runtime/cla/value_generator.hpp src/boost/test/utils/runtime/cla/value_handler.hpp src/boost/test/utils/runtime/config.hpp src/boost/test/utils/runtime/env/environment.hpp src/boost/test/utils/runtime/env/environment.ipp src/boost/test/utils/runtime/env/fwd.hpp src/boost/test/utils/runtime/env/modifier.hpp src/boost/test/utils/runtime/env/variable.hpp src/boost/test/utils/runtime/fwd.hpp src/boost/test/utils/runtime/interpret_argument_value.hpp src/boost/test/utils/runtime/parameter.hpp src/boost/test/utils/runtime/trace.hpp src/boost/test/utils/runtime/validation.hpp src/boost/test/utils/trivial_singleton.hpp src/boost/test/utils/wrap_stringstream.hpp src/boost/test/utils/xml_printer.hpp src/boost/throw_exception.hpp src/boost/timer.hpp src/boost/token_functions.hpp src/boost/token_iterator.hpp src/boost/tokenizer.hpp src/boost/tr1/detail/config.hpp src/boost/tr1/detail/config_all.hpp src/boost/tr1/tuple.hpp src/boost/tuple/detail/tuple_basic.hpp src/boost/tuple/detail/tuple_basic_no_partial_spec.hpp src/boost/tuple/tuple.hpp src/boost/tuple/tuple_comparison.hpp src/boost/type.hpp src/boost/type_traits.hpp src/boost/type_traits/add_const.hpp src/boost/type_traits/add_cv.hpp src/boost/type_traits/add_lvalue_reference.hpp src/boost/type_traits/add_pointer.hpp src/boost/type_traits/add_reference.hpp src/boost/type_traits/add_rvalue_reference.hpp src/boost/type_traits/add_volatile.hpp src/boost/type_traits/aligned_storage.hpp src/boost/type_traits/alignment_of.hpp src/boost/type_traits/alignment_traits.hpp src/boost/type_traits/arithmetic_traits.hpp src/boost/type_traits/array_traits.hpp src/boost/type_traits/broken_compiler_spec.hpp src/boost/type_traits/common_type.hpp src/boost/type_traits/composite_traits.hpp src/boost/type_traits/conditional.hpp src/boost/type_traits/config.hpp src/boost/type_traits/conversion_traits.hpp src/boost/type_traits/cv_traits.hpp src/boost/type_traits/decay.hpp src/boost/type_traits/detail/bool_trait_def.hpp src/boost/type_traits/detail/bool_trait_undef.hpp src/boost/type_traits/detail/common_type_imp.hpp src/boost/type_traits/detail/cv_traits_impl.hpp src/boost/type_traits/detail/false_result.hpp src/boost/type_traits/detail/has_binary_operator.hpp src/boost/type_traits/detail/has_postfix_operator.hpp src/boost/type_traits/detail/has_prefix_operator.hpp src/boost/type_traits/detail/ice_and.hpp src/boost/type_traits/detail/ice_eq.hpp src/boost/type_traits/detail/ice_not.hpp src/boost/type_traits/detail/ice_or.hpp src/boost/type_traits/detail/is_function_ptr_helper.hpp src/boost/type_traits/detail/is_function_ptr_tester.hpp src/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp src/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp src/boost/type_traits/detail/size_t_trait_def.hpp src/boost/type_traits/detail/size_t_trait_undef.hpp src/boost/type_traits/detail/template_arity_spec.hpp src/boost/type_traits/detail/type_trait_def.hpp src/boost/type_traits/detail/type_trait_undef.hpp src/boost/type_traits/detail/wrap.hpp src/boost/type_traits/detail/yes_no_type.hpp src/boost/type_traits/extent.hpp src/boost/type_traits/floating_point_promotion.hpp src/boost/type_traits/function_traits.hpp src/boost/type_traits/has_bit_and.hpp src/boost/type_traits/has_bit_and_assign.hpp src/boost/type_traits/has_bit_or.hpp src/boost/type_traits/has_bit_or_assign.hpp src/boost/type_traits/has_bit_xor.hpp src/boost/type_traits/has_bit_xor_assign.hpp src/boost/type_traits/has_complement.hpp src/boost/type_traits/has_dereference.hpp src/boost/type_traits/has_divides.hpp src/boost/type_traits/has_divides_assign.hpp src/boost/type_traits/has_equal_to.hpp src/boost/type_traits/has_greater.hpp src/boost/type_traits/has_greater_equal.hpp src/boost/type_traits/has_left_shift.hpp src/boost/type_traits/has_left_shift_assign.hpp src/boost/type_traits/has_less.hpp src/boost/type_traits/has_less_equal.hpp src/boost/type_traits/has_logical_and.hpp src/boost/type_traits/has_logical_not.hpp src/boost/type_traits/has_logical_or.hpp src/boost/type_traits/has_minus.hpp src/boost/type_traits/has_minus_assign.hpp src/boost/type_traits/has_modulus.hpp src/boost/type_traits/has_modulus_assign.hpp src/boost/type_traits/has_multiplies.hpp src/boost/type_traits/has_multiplies_assign.hpp src/boost/type_traits/has_negate.hpp src/boost/type_traits/has_new_operator.hpp src/boost/type_traits/has_not_equal_to.hpp src/boost/type_traits/has_nothrow_assign.hpp src/boost/type_traits/has_nothrow_constructor.hpp src/boost/type_traits/has_nothrow_copy.hpp src/boost/type_traits/has_nothrow_destructor.hpp src/boost/type_traits/has_operator.hpp src/boost/type_traits/has_plus.hpp src/boost/type_traits/has_plus_assign.hpp src/boost/type_traits/has_post_decrement.hpp src/boost/type_traits/has_post_increment.hpp src/boost/type_traits/has_pre_decrement.hpp src/boost/type_traits/has_pre_increment.hpp src/boost/type_traits/has_right_shift.hpp src/boost/type_traits/has_right_shift_assign.hpp src/boost/type_traits/has_trivial_assign.hpp src/boost/type_traits/has_trivial_constructor.hpp src/boost/type_traits/has_trivial_copy.hpp src/boost/type_traits/has_trivial_destructor.hpp src/boost/type_traits/has_unary_minus.hpp src/boost/type_traits/has_unary_plus.hpp src/boost/type_traits/has_virtual_destructor.hpp src/boost/type_traits/ice.hpp src/boost/type_traits/integral_constant.hpp src/boost/type_traits/integral_promotion.hpp src/boost/type_traits/intrinsics.hpp src/boost/type_traits/is_abstract.hpp src/boost/type_traits/is_arithmetic.hpp src/boost/type_traits/is_array.hpp src/boost/type_traits/is_base_and_derived.hpp src/boost/type_traits/is_base_of.hpp src/boost/type_traits/is_class.hpp src/boost/type_traits/is_complex.hpp src/boost/type_traits/is_compound.hpp src/boost/type_traits/is_const.hpp src/boost/type_traits/is_convertible.hpp src/boost/type_traits/is_empty.hpp src/boost/type_traits/is_enum.hpp src/boost/type_traits/is_float.hpp src/boost/type_traits/is_floating_point.hpp src/boost/type_traits/is_function.hpp src/boost/type_traits/is_fundamental.hpp src/boost/type_traits/is_integral.hpp src/boost/type_traits/is_lvalue_reference.hpp src/boost/type_traits/is_member_function_pointer.hpp src/boost/type_traits/is_member_object_pointer.hpp src/boost/type_traits/is_member_pointer.hpp src/boost/type_traits/is_object.hpp src/boost/type_traits/is_pod.hpp src/boost/type_traits/is_pointer.hpp src/boost/type_traits/is_polymorphic.hpp src/boost/type_traits/is_reference.hpp src/boost/type_traits/is_rvalue_reference.hpp src/boost/type_traits/is_same.hpp src/boost/type_traits/is_scalar.hpp src/boost/type_traits/is_signed.hpp src/boost/type_traits/is_stateless.hpp src/boost/type_traits/is_union.hpp src/boost/type_traits/is_unsigned.hpp src/boost/type_traits/is_virtual_base_of.hpp src/boost/type_traits/is_void.hpp src/boost/type_traits/is_volatile.hpp src/boost/type_traits/make_signed.hpp src/boost/type_traits/make_unsigned.hpp src/boost/type_traits/msvc/remove_all_extents.hpp src/boost/type_traits/msvc/remove_bounds.hpp src/boost/type_traits/msvc/remove_const.hpp src/boost/type_traits/msvc/remove_cv.hpp src/boost/type_traits/msvc/remove_extent.hpp src/boost/type_traits/msvc/remove_pointer.hpp src/boost/type_traits/msvc/remove_reference.hpp src/boost/type_traits/msvc/remove_volatile.hpp src/boost/type_traits/msvc/typeof.hpp src/boost/type_traits/object_traits.hpp src/boost/type_traits/promote.hpp src/boost/type_traits/rank.hpp src/boost/type_traits/remove_all_extents.hpp src/boost/type_traits/remove_bounds.hpp src/boost/type_traits/remove_const.hpp src/boost/type_traits/remove_cv.hpp src/boost/type_traits/remove_extent.hpp src/boost/type_traits/remove_pointer.hpp src/boost/type_traits/remove_reference.hpp src/boost/type_traits/remove_volatile.hpp src/boost/type_traits/same_traits.hpp src/boost/type_traits/transform_traits.hpp src/boost/type_traits/type_with_alignment.hpp src/boost/typeof/dmc/typeof_impl.hpp src/boost/typeof/encode_decode.hpp src/boost/typeof/encode_decode_params.hpp src/boost/typeof/int_encoding.hpp src/boost/typeof/integral_template_param.hpp src/boost/typeof/message.hpp src/boost/typeof/modifiers.hpp src/boost/typeof/msvc/typeof_impl.hpp src/boost/typeof/native.hpp src/boost/typeof/pointers_data_members.hpp src/boost/typeof/register_functions.hpp src/boost/typeof/register_functions_iterate.hpp src/boost/typeof/register_fundamental.hpp src/boost/typeof/register_mem_functions.hpp src/boost/typeof/template_encoding.hpp src/boost/typeof/template_template_param.hpp src/boost/typeof/type_encoding.hpp src/boost/typeof/type_template_param.hpp src/boost/typeof/typeof.hpp src/boost/typeof/typeof_impl.hpp src/boost/typeof/unsupported.hpp src/boost/typeof/vector.hpp src/boost/typeof/vector100.hpp src/boost/typeof/vector150.hpp src/boost/typeof/vector200.hpp src/boost/typeof/vector50.hpp src/boost/units/detail/utility.hpp src/boost/unordered/detail/allocate.hpp src/boost/unordered/detail/buckets.hpp src/boost/unordered/detail/equivalent.hpp src/boost/unordered/detail/extract_key.hpp src/boost/unordered/detail/fwd.hpp src/boost/unordered/detail/table.hpp src/boost/unordered/detail/unique.hpp src/boost/unordered/detail/util.hpp src/boost/unordered/unordered_map.hpp src/boost/unordered/unordered_map_fwd.hpp src/boost/unordered/unordered_set.hpp src/boost/unordered/unordered_set_fwd.hpp src/boost/unordered_map.hpp src/boost/unordered_set.hpp src/boost/utility.hpp src/boost/utility/addressof.hpp src/boost/utility/base_from_member.hpp src/boost/utility/binary.hpp src/boost/utility/compare_pointees.hpp src/boost/utility/declval.hpp src/boost/utility/detail/in_place_factory_prefix.hpp src/boost/utility/detail/in_place_factory_suffix.hpp src/boost/utility/detail/result_of_iterate.hpp src/boost/utility/enable_if.hpp src/boost/utility/identity_type.hpp src/boost/utility/in_place_factory.hpp src/boost/utility/result_of.hpp src/boost/utility/swap.hpp src/boost/utility/value_init.hpp src/boost/variant/apply_visitor.hpp src/boost/variant/detail/apply_visitor_binary.hpp src/boost/variant/detail/apply_visitor_delayed.hpp src/boost/variant/detail/apply_visitor_unary.hpp src/boost/variant/detail/backup_holder.hpp src/boost/variant/detail/bool_trait_def.hpp src/boost/variant/detail/bool_trait_undef.hpp src/boost/variant/detail/cast_storage.hpp src/boost/variant/detail/config.hpp src/boost/variant/detail/enable_recursive_fwd.hpp src/boost/variant/detail/forced_return.hpp src/boost/variant/detail/generic_result_type.hpp src/boost/variant/detail/has_nothrow_move.hpp src/boost/variant/detail/has_trivial_move.hpp src/boost/variant/detail/hash_variant.hpp src/boost/variant/detail/initializer.hpp src/boost/variant/detail/make_variant_list.hpp src/boost/variant/detail/move.hpp src/boost/variant/detail/over_sequence.hpp src/boost/variant/detail/substitute_fwd.hpp src/boost/variant/detail/variant_io.hpp src/boost/variant/detail/visitation_impl.hpp src/boost/variant/recursive_wrapper_fwd.hpp src/boost/variant/static_visitor.hpp src/boost/variant/variant.hpp src/boost/variant/variant_fwd.hpp src/boost/version.hpp src/boost/visit_each.hpp src/boost/weak_ptr.hpp src/line2av.h src/medial_axis.hpp src/mline2av.h src/myinit.h src/point2av.h src/poly2av.h src/ppport.h src/voronoi2perl.h t/00-compile.t t/01_basic.t t/02_old_api.t t/03_polygon.t t/04_medial_axis_basic.t t/05_medial_axis_visual.t t/release-pod-coverage.t t/release-pod-syntax.t xsp/mytype.map xsp/typemap.xspt xsp/Utils.xsp META.json000444000765000024 221312161110653 15765 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15{ "abstract" : "Bindings for the Boost Geometry library", "author" : [ "Alessandro Ranellucci " ], "dynamic_config" : 1, "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.120630", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "Boost-Geometry-Utils", "prereqs" : { "build" : { "requires" : { "ExtUtils::Typemaps::Default" : "0.05", "ExtUtils::XSpp" : "0.16", "Module::Build" : "0.3601", "Test::More" : "0" } }, "configure" : { "requires" : { "ExtUtils::CppGuess" : "0.07", "Module::Build" : "0.38", "Module::Build::WithXSpp" : "0.10" } } }, "provides" : { "Boost::Geometry::Utils" : { "file" : "lib/Boost/Geometry/Utils.pm", "version" : "0.15" } }, "release_status" : "stable", "resources" : { "license" : [ "http://dev.perl.org/licenses/" ] }, "version" : "0.15" } META.yml000444000765000024 131012161110655 15614 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15--- abstract: 'Bindings for the Boost Geometry library' author: - 'Alessandro Ranellucci ' build_requires: ExtUtils::Typemaps::Default: 0.05 ExtUtils::XSpp: 0.16 Module::Build: 0.3601 Test::More: 0 configure_requires: ExtUtils::CppGuess: 0.07 Module::Build: 0.38 Module::Build::WithXSpp: 0.10 dynamic_config: 1 generated_by: 'Module::Build version 0.38, CPAN::Meta::Converter version 2.120630' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: Boost-Geometry-Utils provides: Boost::Geometry::Utils: file: lib/Boost/Geometry/Utils.pm version: 0.15 resources: license: http://dev.perl.org/licenses/ version: 0.15 README000444000765000024 50112161110640 15176 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15 This archive contains the distribution Boost-Geometry-Utils, version 0.07: Bindings for the Boost Geometry library This software is copyright (c) 2013 by Alessandro Ranellucci. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. lib000755000765000024 012161110610 14750 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15Boost000755000765000024 012161110610 16036 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/libGeometry000755000765000024 012161110610 17631 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/lib/BoostUtils.pm000444000765000024 1344312161110610 21451 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/lib/Boost/Geometrypackage Boost::Geometry::Utils; { $Boost::Geometry::Utils::VERSION = '0.15'; } # ABSTRACT: Bindings for the Boost Geometry library use strict; use warnings; require Exporter; our @ISA = qw(Exporter); use XSLoader; XSLoader::load('Boost::Geometry::Utils', $Boost::Geometry::Utils::VERSION); our @EXPORT_OK = qw(polygon_to_wkt linestring_to_wkt wkt_to_multilinestring polygon linestring polygon_linestring_intersection polygon_multi_linestring_intersection multi_polygon_multi_linestring_intersection point_within_polygon point_covered_by_polygon point_within_multi_polygon point_covered_by_multi_polygon linestring_simplify multi_linestring_simplify linestring_length polygon_centroid linestring_centroid multi_linestring_centroid multi_polygon correct_polygon correct_multi_polygon multi_linestring_multi_polygon_difference polygon_medial_axis polygon_area); sub polygon_to_wkt { sprintf 'POLYGON(%s)', join ',', map { sprintf '(%s)', join ',', map { join ' ', @$_ } @$_ } @_; } sub linestring_to_wkt { sprintf "MULTILINESTRING(%s)", join ',', map { sprintf '(%s)', join ',', map { join ' ', @$_ } @$_ } @_; } sub wkt_to_multilinestring { return [] if $_[0] eq 'MULTILINESTRING()'; $_[0] =~ s/^MULTILINESTRING\(\(//; $_[0] =~ s/\)\)$//; [ map [ map [ split / / ], split /,/ ], split /\),\(/, $_[0] ]; } sub polygon { _polygon(\@_); } sub multi_polygon { _multi_polygon(\@_); } sub linestring { _multi_linestring(\@_) } sub multi_linestring { _multi_linestring(\@_) } 1; __END__ =pod =head1 NAME Boost::Geometry::Utils - Bindings for the Boost Geometry library =head1 VERSION version 0.07 =head1 SYNOPSIS use Boost::Geometry::Utils qw(polygon linestring polygon_linestring_intersection); my $square = [ # ccw [10, 10], [20, 10], [20, 20], [10, 20], ]; my $hole_in_square = [ # cw [14, 14], [14, 16], [16, 16], [16, 14], ]; my $polygon = polygon($square, $hole_in_square); my $linestring = linestring([ [5, 15], [30, 15] ]); my $intersection = polygon_linestring_intersection($polygon, $linestring); # $intersection is: # [ # [ [10, 15], [14, 15] ], # [ [16, 15], [20, 15] ], # ] =head1 ABSTRACT This module provides bindings to perform some geometric operations using the Boost Geometry library. It does not aim at providing full bindings for such library, and that's why I left the I namespace free. I'm unsure about the optimal architectural for providing full bindings, but I'm interested in such a project -- so, if you have ideas please get in touch with me. B the API could change in the future. =head1 METHODS =head2 polygon_linestring_intersection Performs an intersection between the supplied polygon and linestring, and returns an arrayref of linestrings (represented as arrayrefs of points). Note that such an intersection is also called I. =head2 polygon_multi_linestring_intersection Same as I but it accepts a multilinestring object to perform multiple clippings in a single batch. =head2 multi_polygon_multi_linestring_intersection Same as I but it accepts a multipolygon object to perform multiple clippings in a single batch. =head2 multi_linestring_multi_polygon_difference Performs a difference between the supplied multilinestring and the supplied multipolygon. It returns a multilinestring object. =head2 polygon_to_wkt Converts one or more arrayref(s) of points to a WKT representation of a polygon (with holes). =head2 linestring_to_wkt Converts an arrayref of points to a WKT representation of a multilinestring. =head2 wkt_to_multilinestring Parses a MULTILINESTRING back to a Perl data structure. =head2 linestring_simplify Accepts an arrayref of points representing a linestring and a numeric tolerance and returns an arrayref of points representing the simplified linestring. =head2 multi_linestring_simplify Accepts an arrayref of arrayrefs of points representing a multilinestring and a numeric tolerance and returns an arrayref of arrayrefs of points representing the simplified linestrings. =head2 point_covered_by_polygon Accepts a point and an arrayref of points representing a polygon and returns true or false according to the 'cover_by' strategy. =head2 point_covered_by_multi_polygon Same as above but accepts a multipolygon arrayref. =head2 point_within_polygon Accepts a point and an arrayref of points representing a polygon and returns true or false according to the 'within' strategy. =head2 point_within_multi_polygon Same as above but accepts a multipolygon arrayref. =head2 linestring_length Returns length of a linestring. =head2 polygon_centroid Returns the centroid point of a given polygon. =head2 linestring_centroid Returns the centroid point of a given linestring. =head2 multi_linestring_centroid Returns the centroid point of a given multi_linestring. =head2 correct_polygon Corrects the orientation(s) of the given polygon. =head2 correct_multi_polygon Corrects the orientation(s) of the given multi_polygon. =head2 polygon_area Returns the area of the given polygon. =for Pod::Coverage linestring multi_linestring multi_polygon polygon =head1 ACKNOWLEDGEMENTS Thanks to mauke and mst (Matt S. Trout (cpan:MSTROUT) ) for their valuable help in getting this to compile under Windows (MinGW) too. Thanks to Mark Hindness for his work on data types conversion. =head1 AUTHOR Alessandro Ranellucci =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2013 by Alessandro Ranellucci. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut src000755000765000024 012161110675 15004 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15line2av.h000444000765000024 212412161110622 16641 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src#ifndef bgu_line2av_h_ #define bgu_line2av_h_ #include "myinit.h" #include SV* linestring2perl(pTHX_ const linestring& ls) { AV* av = newAV(); const unsigned int line_len = boost::geometry::num_points(ls); av_extend(av, line_len-1); for (int i = 0; i < line_len; i++) { AV* pointav = newAV(); av_store(av, i, newRV_noinc((SV*)pointav)); av_fill(pointav, 1); av_store_point_xy(pointav, ls[i].x(), ls[i].y()); } return (SV*)newRV_noinc((SV*)av); } linestring* perl2linestring(pTHX_ AV* theAv) { using boost::geometry::make; const unsigned int len = av_len(theAv)+1; if (len == 0) return NULL; linestring* retval = new linestring(); SV** elem; AV* innerav; for (unsigned int i = 0; i < len; i++) { elem = av_fetch(theAv, i, 0); if (!SvROK(*elem) || SvTYPE(SvRV(*elem)) != SVt_PVAV || av_len((AV*)SvRV(*elem)) < 1) { delete retval; return NULL; } innerav = (AV*)SvRV(*elem); retval->push_back(av_fetch_point_xy(innerav)); } return retval; } #endif medial_axis.hpp000444000765000024 23510612161110663 20175 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src// medial_axis.hpp header file // derived from // Boost.Polygon library voronoi_diagram.hpp header file // which is // Copyright Andrii Sydorchuk 2010-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) // See http://www.boost.org for updates, documentation, and revision history. // Derivative work by Michael E. Sheldrake, Copyright 2013, distributed // under the same terms as the license above. // This is essentially boost/polygon/voronoi_diagram.hpp adapted to further // process the Voronoi diagram graph structure to make it represent the // medial axis of a polygon (with holes) represented by segment input. #ifndef BOOST_POLYGON_MEDIAL_AXIS #define BOOST_POLYGON_MEDIAL_AXIS #include #include #include #include #include #include "boost/lexical_cast.hpp" #include "boost/polygon/detail/voronoi_ctypes.hpp" #include "boost/polygon/detail/voronoi_structures.hpp" #include "boost/polygon/voronoi_geometry_type.hpp" #define to_str(n) boost::lexical_cast( n ) namespace boost { namespace polygon { // Forward declarations. template class medial_axis_edge; // Represents Voronoi cell. // Data members: // 1) index of the source within the initial input set // 2) pointer to the incident edge // 3) mutable color member // Cell may contain point or segment site inside. template class medial_axis_cell { public: typedef T coordinate_type; typedef std::size_t color_type; typedef medial_axis_edge medial_axis_edge_type; typedef std::size_t source_index_type; typedef SourceCategory source_category_type; medial_axis_cell(source_index_type source_index, source_category_type source_category) : source_index_(source_index), incident_edge_(NULL), color_(source_category) {} // Returns true if the cell contains point site, false else. bool contains_point() const { source_category_type source_category = this->source_category(); return belongs(source_category, GEOMETRY_CATEGORY_POINT); } // Returns true if the cell contains segment site, false else. bool contains_segment() const { source_category_type source_category = this->source_category(); return belongs(source_category, GEOMETRY_CATEGORY_SEGMENT); } source_index_type source_index() const { return source_index_; } source_category_type source_category() const { return static_cast(color_ & SOURCE_CATEGORY_BITMASK); } // Degenerate cells don't have any incident edges. bool is_degenerate() const { return incident_edge_ == NULL; } medial_axis_edge_type* incident_edge() { return incident_edge_; } const medial_axis_edge_type* incident_edge() const { return incident_edge_; } void incident_edge(medial_axis_edge_type* e) { incident_edge_ = e; } color_type color() const { return color_ >> BITS_SHIFT; } void color(color_type color) const { color_ &= BITS_MASK; color_ |= color << BITS_SHIFT; } private: // 5 color bits are reserved. enum Bits { BITS_SHIFT = 0x5, BITS_MASK = 0x1F }; source_index_type source_index_; medial_axis_edge_type* incident_edge_; mutable color_type color_; }; // Represents Voronoi vertex. // Data members: // 1) vertex coordinates // 2) radius of a maximal inscribed circle to the polygon at the vertex // 3) pointer to the incident edge // 4) mutable color member template class medial_axis_vertex { public: typedef T coordinate_type; typedef std::size_t color_type; typedef medial_axis_edge medial_axis_edge_type; medial_axis_vertex(const coordinate_type& x, const coordinate_type& y, const coordinate_type& r=0) : x_(x), y_(y), r_(r), incident_edge_(NULL), color_(0) {} const coordinate_type& x() const { return x_; } const coordinate_type& y() const { return y_; } const coordinate_type& r() const { return r_; } bool is_degenerate() const { return incident_edge_ == NULL; } medial_axis_edge_type* incident_edge() { return incident_edge_; } const medial_axis_edge_type* incident_edge() const { return incident_edge_; } void incident_edge(medial_axis_edge_type* e) { incident_edge_ = e; } color_type color() const { return color_ >> BITS_SHIFT; } void color(color_type color) const { color_ &= BITS_MASK; color_ |= color << BITS_SHIFT; } private: // 5 color bits are reserved. enum Bits { BITS_SHIFT = 0x5, BITS_MASK = 0x1F }; coordinate_type x_; coordinate_type y_; coordinate_type r_; medial_axis_edge_type* incident_edge_; mutable color_type color_; }; // Half-edge data structure. Represents Voronoi edge. // Data members: // 1) pointer to the corresponding cell // 2) pointer to the vertex that is the starting // point of the half-edge // 3) pointer to the twin edge // 4) pointer to the CCW next edge // 5) pointer to the CCW prev edge // 6) boolean indicating whether foot coordinates have been set // 7) mutable color member template class medial_axis_edge { public: typedef T coordinate_type; typedef medial_axis_cell medial_axis_cell_type; typedef medial_axis_vertex medial_axis_vertex_type; typedef medial_axis_edge medial_axis_edge_type; typedef std::size_t color_type; medial_axis_edge(bool is_linear, bool is_primary) : cell_(NULL), vertex_(NULL), twin_(NULL), next_(NULL), prev_(NULL), footset_(false), color_(0) { if (is_linear) color_ |= BIT_IS_LINEAR; if (is_primary) color_ |= BIT_IS_PRIMARY; } medial_axis_cell_type* cell() { return cell_; } const medial_axis_cell_type* cell() const { return cell_; } void cell(medial_axis_cell_type* c) { cell_ = c; } medial_axis_vertex_type* vertex0() { return vertex_; } const medial_axis_vertex_type* vertex0() const { return vertex_; } void vertex0(medial_axis_vertex_type* v) { vertex_ = v; } medial_axis_vertex_type* vertex1() { return twin_->vertex0(); } const medial_axis_vertex_type* vertex1() const { return twin_->vertex0(); } medial_axis_edge_type* twin() { return twin_; } const medial_axis_edge_type* twin() const { return twin_; } void twin(medial_axis_edge_type* e) { twin_ = e; } medial_axis_edge_type* next() { return next_; } const medial_axis_edge_type* next() const { return next_; } void next(medial_axis_edge_type* e) { next_ = e; } medial_axis_edge_type* prev() { return prev_; } const medial_axis_edge_type* prev() const { return prev_; } void prev(medial_axis_edge_type* e) { prev_ = e; } // Returns a pointer to the rotation next edge // over the starting point of the half-edge. medial_axis_edge_type* rot_next() { return prev_->twin(); } const medial_axis_edge_type* rot_next() const { return prev_->twin(); } // Returns a pointer to the rotation prev edge // over the starting point of the half-edge. medial_axis_edge_type* rot_prev() { return twin_->next(); } const medial_axis_edge_type* rot_prev() const { return twin_->next(); } // Returns true if the edge is finite (segment, parabolic arc). // Returns false if the edge is infinite (ray, line). bool is_finite() const { return vertex0() && vertex1(); } // Returns true if the edge is infinite (ray, line). // Returns false if the edge is finite (segment, parabolic arc). bool is_infinite() const { return !vertex0() || !vertex1(); } // Returns true if the edge is linear (segment, ray, line). // Returns false if the edge is curved (parabolic arc). bool is_linear() const { return (color_ & BIT_IS_LINEAR) ? true : false; } // Returns true if the edge is curved (parabolic arc). // Returns false if the edge is linear (segment, ray, line). bool is_curved() const { return (color_ & BIT_IS_LINEAR) ? false : true; } // Returns false if edge goes through the endpoint of the segment. // Returns true else. bool is_primary() const { return (color_ & BIT_IS_PRIMARY) ? true : false; } // Returns true if edge goes through the endpoint of the segment. // Returns false else. bool is_secondary() const { return (color_ & BIT_IS_PRIMARY) ? false : true; } color_type color() const { return color_ >> BITS_SHIFT; } void color(color_type color) const { color_ &= BITS_MASK; color_ |= color << BITS_SHIFT; } // foot: where radius from vertex0 touches source segment at a 90 degree angle const detail::point_2d* foot() const { if (!footset_) {return NULL;} return &foot_; } void foot(coordinate_type x, coordinate_type y) { footset_ = true; foot_.x(x); foot_.y(y); } private: // 5 color bits are reserved. enum Bits { BIT_IS_LINEAR = 0x1, // linear is opposite to curved BIT_IS_PRIMARY = 0x2, // primary is opposite to secondary BITS_SHIFT = 0x5, BITS_MASK = 0x1F }; medial_axis_cell_type* cell_; medial_axis_vertex_type* vertex_; medial_axis_edge_type* twin_; medial_axis_edge_type* next_; medial_axis_edge_type* prev_; mutable color_type color_; mutable detail::point_2d foot_; bool footset_; mutable detail::point_2d p1_; }; template struct medial_axis_traits { typedef T coordinate_type; typedef medial_axis_cell cell_type; typedef medial_axis_vertex vertex_type; typedef medial_axis_edge edge_type; typedef class { public: enum { ULPS = 128 }; bool operator()(const vertex_type& v1, const vertex_type& v2) const { return (ulp_cmp(v1.x(), v2.x(), ULPS) == detail::ulp_comparison::EQUAL) && (ulp_cmp(v1.y(), v2.y(), ULPS) == detail::ulp_comparison::EQUAL); } private: typename detail::ulp_comparison ulp_cmp; } vertex_equality_predicate_type; }; // Voronoi output data structure. // CCW ordering is used on the faces perimeter and around the vertices. template > class medial_axis { public: typedef typename TRAITS::coordinate_type coordinate_type; typedef typename TRAITS::cell_type cell_type; typedef typename TRAITS::vertex_type vertex_type; typedef typename TRAITS::edge_type edge_type; typedef std::vector cell_container_type; typedef typename cell_container_type::const_iterator const_cell_iterator; typedef std::vector vertex_container_type; typedef typename vertex_container_type::const_iterator const_vertex_iterator; typedef std::vector edge_container_type; typedef typename edge_container_type::const_iterator const_edge_iterator; medial_axis() {} void clear() { cells_.clear(); vertices_.clear(); edges_.clear(); } const cell_container_type& cells() const { return cells_; } const vertex_container_type& vertices() const { return vertices_; } const edge_container_type& edges() const { return edges_; } const std::string& event_log() const { return event_log_; } std::size_t num_cells() const { return cells_.size(); } std::size_t num_edges() const { return edges_.size(); } std::size_t num_vertices() const { return vertices_.size(); } void _reserve(int num_sites) { cells_.reserve(num_sites); vertices_.reserve(num_sites << 1); edges_.reserve((num_sites << 2) + (num_sites << 1)); } template void _process_single_site(const detail::site_event& site) { cells_.push_back(cell_type(site.initial_index(), site.source_category())); } // Insert a new half-edge into the output data structure. // Takes as input left and right sites that form a new bisector. // Returns a pair of pointers to a new half-edges. template std::pair _insert_new_edge( const detail::site_event& site1, const detail::site_event& site2) { //printf("site event\n"); // Get sites' indexes. int site_index1 = site1.sorted_index(); int site_index2 = site2.sorted_index(); bool is_linear = is_linear_edge(site1, site2); bool is_primary = is_primary_edge(site1, site2); // Create a new half-edge that belongs to the first site. edges_.push_back(edge_type(is_linear, is_primary)); edge_type& edge1 = edges_.back(); // Create a new half-edge that belongs to the second site. edges_.push_back(edge_type(is_linear, is_primary)); edge_type& edge2 = edges_.back(); // Add the initial cell during the first edge insertion. if (cells_.empty()) { cells_.push_back(cell_type( site1.initial_index(), site1.source_category())); } // The second site represents a new site during site event // processing. Add a new cell to the cell records. cells_.push_back(cell_type( site2.initial_index(), site2.source_category())); // Set up pointers to cells. edge1.cell(&cells_[site_index1]); edge2.cell(&cells_[site_index2]); // Set up twin pointers. edge1.twin(&edge2); edge2.twin(&edge1); // if the edge is curved we can display a parabola between the point and // segment that define it, and we know the start and end feet for the // half edge on the point side - just the point. We might be able to // figure the feet on the segment too, but not sure. // if the edge is straight, feet at start and end are probably just // site vertices - but which? first or second? and what about seeing // a vertex multiple times for the three events from a segment? // Maybe only figure foot when the segment event happens. What about the // inverted segment? maybe only deal with foot when handling the segment the // second time around. event_log_ += "\n"; bool showfeet = false; if (false) { if (belongs(site1.source_category(), GEOMETRY_CATEGORY_POINT)) { event_log_ += "\n"; } else if (belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { event_log_ += "\n"; } else { event_log_ += "\n"; } if (belongs(site2.source_category(), GEOMETRY_CATEGORY_POINT)) { event_log_ += "\n"; } else if (belongs(site2.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { event_log_ += "\n"; } else { event_log_ += "\n"; } if (!is_linear) { event_log_ += "\n"; } else { event_log_ += "\n"; } } //set foot // this needs work - see note for "set foot" below in the // _insert_new_edge() function for circle events // Though the foot determined here for curved edges is likely correct // it's also likely it's getting reset later when a vertex is available. if (!is_linear //belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT) //|| belongs(site2.source_category(), GEOMETRY_CATEGORY_SEGMENT) ) { if (edge1.cell()->contains_point() //&& edge2.cell()->contains_segment() ) { // belongs(site1.source_category(), GEOMETRY_CATEGORY_POINT) // && belongs(site2.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { edge1.foot(site1.point0().x(), site1.point0().y()); //printf("ine1 foot 1\n"); if (showfeet) { event_log_ += "\n"; } } if (edge2.cell()->contains_point() //&& edge1.cell()->contains_segment() ) { // belongs(site2.source_category(), GEOMETRY_CATEGORY_POINT) // && belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { edge2.foot(site2.point0().x(), site2.point0().y()); //printf("ine1 foot 2\n"); if (showfeet) { event_log_ += "\n"; } } } event_log_ += "\n"; // Return a pointer to the new half-edge. return std::make_pair(&edge1, &edge2); } // Insert a new half-edge into the output data structure with the // start at the point where two previously added half-edges intersect. // Takes as input two sites that create a new bisector, circle event // that corresponds to the intersection point of the two old half-edges, // pointers to those half-edges. Half-edges' direction goes out of the // new Voronoi vertex point. Returns a pair of pointers to a new half-edges. template std::pair _insert_new_edge( const detail::site_event& site1, const detail::site_event& site3, const detail::circle_event& circle, void* data12, void* data23) { edge_type* edge12 = static_cast(data12); edge_type* edge23 = static_cast(data23); //printf("circle event\n"); // Add a new Voronoi vertex. vertices_.push_back(vertex_type(circle.x(), circle.y(), circle.lower_x() - circle.x())); vertex_type& new_vertex = vertices_.back(); event_log_ += "\n"; if (false) { event_log_ += "\n"; event_log_ += "\n"; event_log_ += "\n"; event_log_ += "\n"; } //printf("whatverts? %d %d %d %d\n",(edge12->vertex0()?1:0),(edge12->vertex1()?1:0),(edge23->vertex0()?1:0),(edge23->vertex1()?1:0)); // Update vertex pointers of the old edges. edge12->vertex0(&new_vertex); edge23->vertex0(&new_vertex); // It appears that the "old" edges never have vertex0 set before the above. // But often one or both of them already have vertex1 set. if (false) { if (edge12->vertex0() && edge12->vertex1()) { event_log_ += "vertex0()->x())+"\" y1=\""+to_str(edge12->vertex0()->y())+"\""; event_log_ += " x2=\""+to_str(edge12->vertex1()->x())+"\" y2=\""+to_str(edge12->vertex1()->y())+"\"/>\n"; event_log_ += "\n"; //printf( "WE ARE HERE1\n"); } if (edge23->vertex0() && edge23->vertex1()) { event_log_ += "vertex0()->x())+"\" y1=\""+to_str(edge23->vertex0()->y())+"\""; event_log_ += " x2=\""+to_str(edge23->vertex1()->x())+"\" y2=\""+to_str(edge23->vertex1()->y())+"\"/>\n"; event_log_ += "\n"; //printf( "WE ARE HERE2\n"); } if (belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { event_log_ += "\n"; } else if (belongs(site1.source_category(), GEOMETRY_CATEGORY_POINT)) { event_log_ += "\n"; } if (belongs(site3.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { event_log_ += "\n"; } else if (belongs(site3.source_category(), GEOMETRY_CATEGORY_POINT)) { event_log_ += "\n"; } } bool is_linear = is_linear_edge(site1, site3); bool is_primary = is_primary_edge(site1, site3); // Add a new half-edge. edges_.push_back(edge_type(is_linear, is_primary)); edge_type& new_edge1 = edges_.back(); new_edge1.cell(&cells_[site1.sorted_index()]); // Add a new half-edge. edges_.push_back(edge_type(is_linear, is_primary)); edge_type& new_edge2 = edges_.back(); new_edge2.cell(&cells_[site3.sorted_index()]); // Update twin pointers. new_edge1.twin(&new_edge2); new_edge2.twin(&new_edge1); // Update vertex pointer. new_edge2.vertex0(&new_vertex); // Update Voronoi prev/next pointers. edge12->prev(&new_edge1); new_edge1.next(edge12); edge12->twin()->next(edge23); edge23->prev(edge12->twin()); edge23->twin()->next(&new_edge2); new_edge2.prev(edge23->twin()); //set foot // It's possible that we can do all foot-finding in this event processing // (here in the circle event, and in the other site even code above). // But we haven't completely understood or diagramed exactly what edges and // vertices are available during these events. With a rough mental sketch // of whats going on, we've been able to quickly work up this code to // calculate enough feet, and infer others later, to handle most cases, and // demonstrate that this medial axis refinement of the Voronoi diagram // should work. // // What's needed next is to properly analyze-diagram-understand what's // happening during site/circle events, so the code here can be extended // a bit to really cover all cases of calculating the foot, or as many // cases as possible. bool showfeet = false; // for edges going into corners // edge12 into corner // note the cast from float to int for these ==s : LHS is an int type, RHS is float // nope: that didn't fix it, and that's what we want to avoid anyway if (edge12->vertex1() //&& ( (site1.point1().x() == (coordinate_type) edge12->vertex1()->x() && site1.point1().y() == (coordinate_type) edge12->vertex1()->y()) // || (site1.point0().x() == (coordinate_type) edge12->vertex1()->x() && site1.point0().y() == (coordinate_type) edge12->vertex1()->y()) // ) // If this really works, do same/similar for next if for edge23 // ... catches more cases than the target case, putting some feet not on polygon segments // but see if something similarly topological can do the job here && edge12->is_primary() && edge12->next() && !edge12->next()->is_primary() && ( edge12->next()->cell()->contains_point() || edge12->next()->twin()->cell()->contains_point() ) && belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT) ) { double x0 = site1.point0().x(); double y0 = site1.point0().y(); double x1 = site1.point1().x(); double y1 = site1.point1().y(); double x = new_vertex.x(); double y = new_vertex.y(); makefoot(x, y, x0, y0, x1, y1); edge12->foot(x, y); if (showfeet) { event_log_ += "\n"; } // and probably: //edge12->twin()->foot(edge12->vertex1()->x(), edge12->vertex1()->y()); //event_log_ += "vertex1()->x())+"\" cy=\""+to_str(edge12->vertex1()->y())+"\" r=\"50000\" class=\"evtfootc\"/>\n"; // and probably too: // this had bad effect in one place in t/test, similar to case below for edge23 //reflect(x, y, edge12->vertex0()->x(), edge12->vertex0()->y(), // edge12->vertex1()->x(), edge12->vertex1()->y()); //edge23->foot(x, y); if (showfeet) { //event_log_ += "\n"; } //printf("pre3_1\n"); //printf("AH 1\n"); } // edge23 into corner if (edge23->vertex1() //&& //( (edge23->vertex1()->x() == site3.point1().x() && edge23->vertex1()->y() == site3.point1().y()) //|| (edge23->vertex1()->x() == site3.point0().x() && edge23->vertex1()->y() == site3.point0().y()) //) //&& edge23->is_primary() && edge23->next() && !edge23->next()->is_primary() && edge23->is_primary() && edge23->next() && !edge23->next()->is_primary() && ( edge23->next()->cell()->contains_point() || edge23->next()->twin()->cell()->contains_point() ) && belongs(site3.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { // this one for edge12 made extraneous feet // so commenting out here too - but without demonstrating it's wrong here too //edge23->twin()->foot(edge23->vertex1()->x(), edge23->vertex1()->y()); //event_log_ += "vertex1()->x())+"\" cy=\""+to_str(edge23->vertex1()->y())+"\" r=\"110000\" class=\"evtfootc\"/>\n"; // and : double x0 = site3.point0().x(); double y0 = site3.point0().y(); double x1 = site3.point1().x(); double y1 = site3.point1().y(); double x = new_vertex.x(); double y = new_vertex.y(); makefoot(x, y, x0, y0, x1, y1); new_edge2.foot(x, y); if (showfeet) { event_log_ += "\n"; } // this had bad effect in couple places in t/test //reflect(x, y, edge23->vertex0()->x(), edge23->vertex0()->y(), // edge23->vertex1()->x(), edge23->vertex1()->y()); //edge23->foot(x, y); if (showfeet) { //event_log_ += "\n"; } //printf("AH 3\n"); } // maybe if (edge12->is_primary() && edge12->vertex1() && belongs(site1.source_category(), GEOMETRY_CATEGORY_POINT) && (edge12->vertex1()->x() == site1.point0().x() && edge12->vertex1()->y() == site1.point0().y()) ) { edge12->twin()->foot(edge12->vertex1()->x(), edge12->vertex1()->y()); if (showfeet) { event_log_ += "vertex1()->x())+"\" cy=\""+to_str(edge12->vertex1()->y())+"\" r=\"110000\" class=\"evtfootc\"/>\n"; } } // maybe if (edge23->is_primary() && edge23->vertex1() && belongs(site3.source_category(), GEOMETRY_CATEGORY_POINT) && (edge23->vertex1()->x() == site3.point0().x() && edge23->vertex1()->y() == site3.point0().y()) ) { edge23->twin()->foot(edge23->vertex1()->x(), edge23->vertex1()->y()); if (showfeet) { event_log_ += "vertex1()->x())+"\" cy=\""+to_str(edge23->vertex1()->y())+"\" r=\"110000\" class=\"evtfootc\"/>\n"; } } // special case derived from visual debug if ( belongs(site1.source_category(), GEOMETRY_CATEGORY_POINT) && belongs(site3.source_category(), GEOMETRY_CATEGORY_SEGMENT) ) { if ( ( (site3.point0().x() == site1.point0().x() && site3.point0().y() == site1.point0().y()) || (site3.point1().x() == site1.point0().x() && site3.point1().y() == site1.point0().y()) ) && edge23->is_primary() && (edge23->vertex0()->x() == site1.point0().x() && edge23->vertex0()->y() == site1.point0().y()) ) { // visually, looked like this was already there // but maybe that was wrongly associated with another edge? // so set/reset to see... // yeah this wasn't set, even though there appeared to be a foot there // so that was probably a wrong foot from something else // and this is maybe right edge23->foot(site1.point0().x(), site1.point0().y()); double x0 = site3.point0().x(); double y0 = site3.point0().y(); double x1 = site3.point1().x(); double y1 = site3.point1().y(); double x = edge23->vertex1()->x(); double y = edge23->vertex1()->y(); makefoot(x, y, x0, y0, x1, y1); edge23->twin()->foot(x, y); if (showfeet) { event_log_ += "\n"; } reflect(x, y, edge23->vertex0()->x(), edge23->vertex0()->y(), edge23->vertex1()->x(), edge23->vertex1()->y()); edge23->next()->foot(x, y); if (showfeet) { event_log_ += "\n"; } //printf("\nMAYBEMAYBE 1\n"); } } // similar special case derived from above, but maybe doesn't happen? if ( belongs(site3.source_category(), GEOMETRY_CATEGORY_POINT) && belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT) ) { if ( (site1.point0().x() == site3.point0().x() && site1.point0().y() == site3.point0().y()) || (site1.point1().x() == site3.point0().x() && site1.point1().y() == site3.point0().y()) ) { //printf("\nMAYBEMAYBE 2\n"); } } // for straight edges if (edge23->vertex1() && !edge23->twin()->foot() && edge23->is_linear() //&& edge23->twin()->is_primary() && belongs(site3.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { double x0 = site3.point0().x(); double y0 = site3.point0().y(); double x1 = site3.point1().x(); double y1 = site3.point1().y(); double x = edge23->vertex1()->x(); double y = edge23->vertex1()->y(); makefoot(x, y, x0, y0, x1, y1); edge23->twin()->foot(x, y); if (showfeet) { event_log_ += "\n"; } } if (edge23->vertex1() && !new_edge2.foot() && new_edge2.is_linear() //&& new_edge2.is_primary() && belongs(site3.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { double x0 = site3.point0().x(); double y0 = site3.point0().y(); double x1 = site3.point1().x(); double y1 = site3.point1().y(); double x = new_vertex.x(); double y = new_vertex.y(); makefoot(x, y, x0, y0, x1, y1); new_edge2.foot(x, y); if (showfeet) { event_log_ += "\n"; } } if (!edge12->foot() && edge12->is_linear() //&& edge12->is_primary() && belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT) && edge12->vertex1() ) { double x0 = site1.point0().x(); double y0 = site1.point0().y(); double x1 = site1.point1().x(); double y1 = site1.point1().y(); double x = new_vertex.x(); double y = new_vertex.y(); makefoot(x, y, x0, y0, x1, y1); edge12->foot(x, y); if (showfeet) { event_log_ += "\n"; } if (new_vertex.r() == 0 && edge12->vertex1()) { edge12->twin()->foot(edge12->vertex1()->x(), edge12->vertex1()->y()); if (showfeet) { event_log_ += "vertex1()->x())+"\" cy=\""+to_str(edge12->vertex1()->y())+"\" r=\"220000\" class=\"evtfootc\"/>\n"; } } } // didn't see change with this // might be redundant - or not right // thinking not right, though it is picking up a case that the first // foot finding conditional should get // ... yeah doesn't seem right if (false && edge12->vertex1() && !edge12->next()->foot() && edge12->is_linear() //&& edge12->is_primary() && belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { double x0 = site1.point0().x(); double y0 = site1.point0().y(); double x1 = site1.point1().x(); double y1 = site1.point1().y(); double x = edge12->vertex1()->x(); double y = edge12->vertex1()->y(); makefoot(x, y, x0, y0, x1, y1); edge12->next()->foot(x, y); if (showfeet) { event_log_ += "\n"; } } // trying to fill in corner feet // seems to work without creating feet where they don't belong if (!edge12->is_primary() && edge12->vertex1() && !edge12->twin()->prev()->is_primary() && edge12->next()->is_primary() && !edge12->next()->foot() ) { edge12->next()->foot(edge12->vertex1()->x(), edge12->vertex1()->y()); if (showfeet) { event_log_ += "vertex1()->x())+"\" cy=\""+to_str(edge12->vertex1()->y())+"\" r=\"30000\" class=\"evtfootc\"/>\n"; } } if ( !edge23->is_primary() && edge23->vertex1() && !edge23->twin()->prev()->is_primary() && edge23->next()->is_primary() && !edge23->next()->foot() ) { edge23->next()->foot(edge23->vertex1()->x(), edge23->vertex1()->y()); if (showfeet) { event_log_ += "vertex1()->x())+"\" cy=\""+to_str(edge23->vertex1()->y())+"\" r=\"40000\" class=\"evtfootc\"/>\n"; } } // another based on special case, that hopefully has general utility // this worked for that one special case if ( !edge23->foot() && edge23->vertex1() && edge23->is_linear() && edge23->twin()->next()->foot() ) { double x = edge23->twin()->next()->foot()->x(); double y = edge23->twin()->next()->foot()->y(); reflect(x, y, edge23->vertex0()->x(), edge23->vertex0()->y(), edge23->vertex1()->x(), edge23->vertex1()->y()); edge23->foot(x, y); if (showfeet) { event_log_ += "\n"; } } // same as above but for edge12 - no test case to demonstrate it yet though if ( !edge12->foot() && edge12->vertex1() && edge12->is_linear() && edge12->twin()->next()->foot() ) { double x = edge12->twin()->next()->foot()->x(); double y = edge12->twin()->next()->foot()->y(); reflect(x, y, edge12->vertex0()->x(), edge12->vertex0()->y(), edge12->vertex1()->x(), edge12->vertex1()->y()); edge12->foot(x, y); if (showfeet) { event_log_ += "\n"; } } // another special case // got it - that was last of first round of many missing feet if ( !edge23->foot() && !edge12->is_primary() //&& !edge23->is_curved() && edge23->is_primary() && edge12->vertex1() ) { edge23->foot(edge12->vertex1()->x(), edge12->vertex1()->y()); } // might need similar but not same as above for similar edge12 case // if that's possible, but should demonstrate or illustrate need for that // curved edges // on t/test this might not have significant effect with or without // ... this fixes missing feet on full hex grid test if ( //!edge12->foot() && edge12->is_curved()) { if (belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { double x0 = site1.point0().x(); double y0 = site1.point0().y(); double x1 = site1.point1().x(); double y1 = site1.point1().y(); double x = new_vertex.x(); double y = new_vertex.y(); makefoot(x, y, x0, y0, x1, y1); edge12->foot(x, y); //printf("pre3_1\n"); if (showfeet) { event_log_ += "\n"; } } else if (belongs(site1.source_category(), GEOMETRY_CATEGORY_POINT)) { edge12->foot(site1.point0().x(), site1.point0().y()); //printf("pre3_2\n"); if (showfeet) { event_log_ += "\n"; } } } // on t/test this is not good if (false && //!edge23->twin()->foot() && edge23->is_curved()) { if (belongs(site3.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { double x0 = site3.point0().x(); double y0 = site3.point0().y(); double x1 = site3.point1().x(); double y1 = site3.point1().y(); double x = new_vertex.x(); double y = new_vertex.y(); makefoot(x, y, x0, y0, x1, y1); //edge23->foot(x, y); edge23->twin()->foot(x, y); //printf("NEWpre3_1\n"); if (showfeet) { event_log_ += "\n"; } } if (belongs(site3.source_category(), GEOMETRY_CATEGORY_POINT)) { //edge12->foot(site3.point0().x(), site3.point0().y()); edge23->twin()->foot(site3.point0().x(), site3.point0().y()); //printf("NEWpre3_2\n"); if (showfeet) { event_log_ += "\n"; } } } if (edge12->twin()->foot() && edge12->twin()->cell()->contains_point() && !edge23->foot()) { edge23->foot(edge12->twin()->foot()->x(), edge12->twin()->foot()->y()); //printf("around point\n"); if (showfeet) { event_log_ += "twin()->foot()->x())+"\" cy=\""+to_str(edge12->twin()->foot()->y())+"\" r=\"110000\" class=\"evtfoot2\"/>\n"; } } if (edge23->foot() && edge23->cell()->contains_point() && edge23->next() && !edge23->next()->foot() && edge23->next()->is_primary()) { // rare edge23->next()->foot(edge23->foot()->x(), edge23->foot()->y()); //printf("around point SOME MORE\n"); if (showfeet) { event_log_ += "foot()->x())+"\" cy=\""+to_str(edge23->foot()->y())+"\" r=\"110000\" class=\"evtfoot2\"/>\n"; } } if (edge23->twin()->foot() && edge23->twin()->cell()->contains_point() && !new_edge2.foot()) { new_edge2.foot(edge23->twin()->foot()->x(), edge23->twin()->foot()->y()); //printf("around point TO NEW 2\n"); if (showfeet) { event_log_ += "twin()->foot()->x())+"\" cy=\""+to_str(edge23->twin()->foot()->y())+"\" r=\"110000\" class=\"evtfoot2\"/>\n"; } } if (edge12->foot() && edge12->cell()->contains_point() && !new_edge1.foot()) { new_edge1.foot(edge12->foot()->x(), edge12->foot()->y()); //printf("around point TO NEW 1\n"); if (showfeet) { event_log_ += "foot()->x())+"\" cy=\""+to_str(edge12->foot()->y())+"\" r=\"110000\" class=\"evtfoot2\"/>\n"; } } // derived from lingering special case on hex fan housing (way above hex mesh) // ... but also handles at least three feet in t/test, so this is legit // ... yes this is happening in several cases that are also handled by other // cases above, and then a few those miss if ( !edge23->foot() && edge23->is_curved() && new_edge2.is_curved() && edge23->twin()->cell()->contains_point() && new_edge2.cell()->contains_point() && edge12->foot() ) { double x = edge12->foot()->x(); double y = edge12->foot()->y(); reflect(x, y, edge12->vertex0()->x(), edge12->vertex0()->y(), edge12->vertex1()->x(), edge12->vertex1()->y()); edge23->foot(x, y); event_log_ += "\n"; } if (!is_linear) { if (belongs(site1.source_category(), GEOMETRY_CATEGORY_POINT) && belongs(site3.source_category(), GEOMETRY_CATEGORY_SEGMENT) ) { if (new_edge2.vertex0()) { double x0 = site3.point0().x(); double y0 = site3.point0().y(); double x1 = site3.point1().x(); double y1 = site3.point1().y(); double x = new_edge2.vertex0()->x(); double y = new_edge2.vertex0()->y(); //printf("mf3"); makefoot(x, y, x0, y0, x1, y1); //printf("\n"); new_edge2.foot(x, y); if (showfeet) { event_log_ += "\n"; } } } if (belongs(site3.source_category(), GEOMETRY_CATEGORY_POINT) && belongs(site1.source_category(), GEOMETRY_CATEGORY_SEGMENT)) { new_edge2.foot(site3.point0().x(), site3.point0().y()); if (showfeet) { event_log_ += "\n"; } //printf("premf4\n"); if ( false //new_edge2.vertex0() //&& new_edge2.vertex1() ) { double x0 = site1.point0().x(); double y0 = site1.point0().y(); double x1 = site1.point1().x(); double y1 = site1.point1().y(); double x = new_edge1.vertex0()->x(); double y = new_edge1.vertex0()->y(); //double x = new_vertex.x(); //double y = new_vertex.y(); //printf("mf4"); makefoot(x, y, x0, y0, x1, y1); //printf("\n"); // We were getting in here often, but this foot is probably // getting reset most of the time by one of the other conditionals. // Only noticed one foot affected by perturbing this foot. new_edge1.foot(x, y); if (showfeet) { event_log_ += "\n"; } } } } event_log_ += "\n"; // Return a pointer to the new half-edge. return std::make_pair(&new_edge1, &new_edge2); } void _build() { // Remove degenerate edges. edge_iterator last_edge = edges_.begin(); for (edge_iterator it = edges_.begin(); it != edges_.end(); it += 2) { const vertex_type* v1 = it->vertex0(); const vertex_type* v2 = it->vertex1(); if (v1 && v2 && vertex_equality_predicate_(*v1, *v2)) { remove_edge(&(*it)); } else { if (it != last_edge) { edge_type* e1 = &(*last_edge = *it); edge_type* e2 = &(*(last_edge + 1) = *(it + 1)); e1->twin(e2); e2->twin(e1); if (e1->prev()) { e1->prev()->next(e1); e2->next()->prev(e2); } if (e2->prev()) { e1->next()->prev(e1); e2->prev()->next(e2); } } last_edge += 2; } } edges_.erase(last_edge, edges_.end()); // Set up incident edge pointers for cells and vertices. for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { it->cell()->incident_edge(&(*it)); if (it->vertex0()) { it->vertex0()->incident_edge(&(*it)); } } // Remove degenerate vertices. vertex_iterator last_vertex = vertices_.begin(); for (vertex_iterator it = vertices_.begin(); it != vertices_.end(); ++it) { if (it->incident_edge()) { if (it != last_vertex) { *last_vertex = *it; vertex_type* v = &(*last_vertex); edge_type* e = v->incident_edge(); do { e->vertex0(v); e = e->rot_next(); } while (e != v->incident_edge()); } ++last_vertex; } } vertices_.erase(last_vertex, vertices_.end()); // Set up next/prev pointers for infinite edges. if (vertices_.empty()) { if (!edges_.empty()) { // Update prev/next pointers for the line edges. edge_iterator edge_it = edges_.begin(); edge_type* edge1 = &(*edge_it); edge1->next(edge1); edge1->prev(edge1); ++edge_it; edge1 = &(*edge_it); ++edge_it; while (edge_it != edges_.end()) { edge_type* edge2 = &(*edge_it); ++edge_it; edge1->next(edge2); edge1->prev(edge2); edge2->next(edge1); edge2->prev(edge1); edge1 = &(*edge_it); ++edge_it; } edge1->next(edge1); edge1->prev(edge1); } } else { // Update prev/next pointers for the ray edges. for (cell_iterator cell_it = cells_.begin(); cell_it != cells_.end(); ++cell_it) { if (cell_it->is_degenerate()) continue; // Move to the previous edge while // it is possible in the CW direction. edge_type* left_edge = cell_it->incident_edge(); while (left_edge->prev() != NULL) { left_edge = left_edge->prev(); // Terminate if this is not a boundary cell. if (left_edge == cell_it->incident_edge()) break; } if (left_edge->prev() != NULL) continue; edge_type* right_edge = cell_it->incident_edge(); while (right_edge->next() != NULL) right_edge = right_edge->next(); left_edge->prev(right_edge); right_edge->next(left_edge); } } // The above gets us the complete Voronoi diagram. // Now we'll narrow that down to just the medial axis for the polygon. if (0) { // handy data dump to copy-paste between stages while debugging for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { printf("edge %lld: %lld, %lld, %lld, %ld, %ld, %s, %s, %s, %s, %s\n", (long long unsigned int) &(*it), (long long unsigned int) it->twin(), (long long unsigned int) it->next(), (long long unsigned int) it->prev(), it->color(), it->cell()->source_index(), it->is_curved()?"curved":" ", it->is_finite()?"finite":" ", it->is_primary()?"primary":" ", it->twin() == it->next() ? "next=twin":"twok", &(*it) == it->next() ? "next=itself":"nxtok" ); } } // Mark edges exterior to the polygon by setting color attribute to 1. // (Adjacent vertices and cells are also marked.) for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (!it->is_finite()) { mark_exterior(&(*it)); } } // Now all the cells associated with the polygon's outer contour segments // have color() == 1, while all cells associated with holes still have // color() == 0. This isn't always enough information to label all edges // inside holes correctly. We'll go ahead and label edges not associated // with the outer cells as edges in holes, and then later correct // mislabeled edges. for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if ( it->cell()->color() == 0 // cells with color 0 at this point are either holes // or regions within the polygon associated with concavites && it->twin()->cell()->color() == 0 // this avoids labeling edges coming directly off // of the inner side of the medial axis that surrounds a hole && ( it->next()->twin()->cell()->color() != 1 && it->prev()->twin()->cell()->color() != 1) ) { it->color(1); } } // Now we find cells with a mix of primary edges labeled as inside and // outside. Adjacent primary edges can't have different inside-outside // status. We're sure about the edges we've labled as within the polygon // so far. So we recursively label adjacent primary edges as within if they // don't have that label already, and non-primary edges associated with // curved edges get their labels fixed too. for (cell_iterator it = cells_.begin(); it != cells_.end(); ++it) { //printf(" cell source_index %ld\n",it->source_index()); edge_type* e = it->incident_edge(); do { if (e->is_primary() && e->next()->is_primary()) { if (e->color() == 0 && e->next()->color() != 0) { //printf(" start first recurse\n"); mark_interior(e->next()); } if (e->color() != 0 && e->next()->color() == 0) { //printf(" start second recurse\n"); mark_interior(e, true); } } e = e->next(); } while (e != it->incident_edge()); } // Deeper edges still escape recursive stuff above // Adjust this or copy modify to capture a few more cases // prob bring back req that at least one is primary // and consider looking at consective primary by doing a next->twin->next // jump over any secondary () and then if you do a 1 to 0 color conversion // probably change color of the hopped-over secondary too. for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if ( //it->is_primary() && ( //it->next()->is_primary() && it->next()->color() == 0 && //it->prev()->is_primary() && it->prev()->color() == 0 ) ) { it->color(0); it->twin()->color(0); } } // yes, this fixed some missed cases for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if ( it->is_primary() && it->color() == 0 && !it->next()->is_primary() && it->next()->twin()->next()->is_primary() && it->next()->twin()->next()->color() == 1 ) { it->next()->twin()->next()->color(0); it->next()->twin()->next()->twin()->color(0); // the hopped-over non primaries should be changed too it->next()->color(0); it->next()->twin()->color(0); } } // Some non-primary edges of more complex cells don't get corrected // by the steps above. But now they're easy to identify and fix. for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (!it->is_primary() && ( it->rot_next()->is_primary() && it->rot_next()->color() == 0 && it->rot_prev()->is_primary() && it->rot_prev()->color() == 0 ) ) { it->color(0); it->twin()->color(0); } } //event_log_ += "\n"; // Still missing some - think it's secondaries. for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if ( !it->is_primary() && it->color() == 1 && it->vertex0() && it->vertex1() && ( ( it->twin()->prev()->is_curved() && //&& (it->twin()->prev()->is_curved() // || (it->twin()->prev()->is_finite() && it->twin()->prev()->is_primary()) ) it->prev()->color() == 1 && it->prev()->is_primary() && it->twin()->prev()->color() == 0 && it->twin()->prev()->prev()->color() == 0 ) //|| //( //&& (it->prev()->is_curved() // || (it->prev()->is_finite() && it->prev()->is_primary()) ) //it->next()->color() == 1 && it->next()->is_primary() //it->prev()->color() == 0 //&& it->prev()->prev()->color() == 0 //) ) ) { printf("\n\nYES\n\n"); //it->color(0); //it->twin()->color(0); if (it->vertex0() && it->vertex1()) { event_log_ += "vertex0()->x())+"\" y1=\""+to_str(it->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(it->vertex1()->x())+"\" y2=\""+to_str(it->vertex1()->y())+"\" />\n"; } } } bool dbge = false; if (dbge) { for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { edge_type* edge = &(*it); if (edge->color() == 1 && edge->vertex0() && edge->vertex1()) { event_log_ += "vertex0()->x())+"\" y1=\""+to_str(edge->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(edge->vertex1()->x())+"\" y2=\""+to_str(edge->vertex1()->y())+"\" />\n"; if (edge->is_primary()) { event_log_ += "vertex0()->x())+"\" y1=\""+to_str(edge->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(edge->vertex1()->x())+"\" y2=\""+to_str(edge->vertex1()->y())+"\" />\n"; } else if (!edge->is_primary()) { event_log_ += "vertex0()->x())+"\" y1=\""+to_str(edge->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(edge->vertex1()->x())+"\" y2=\""+to_str(edge->vertex1()->y())+"\" />\n"; } } } } // Now all edges within the polygon have color() == 0 and all edges // outside of the polygon or inside holes in the polygon have // color() == 1. ///////////// // At this point we modify the half edge graph to better represent the // the medial axis. // The main thing to do is update next() and prev() pointers to follow // along the primary edges that represent the medial axis, instead // of having them point just to the next/prev within each Voronoi cell. // Get the edge corresponding to the first polygon input segment // so the first loop we traverse is the outer polygon loop. // Currently it doesn't matter that we process that first, but we // may want to enhance the output data structure later to reflect // inside vs outside/in-concavity/in-hole medial axis edge collections. edge_type * start_edge = NULL; for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (it->cell()->source_index() == 0 && it->color() == 0 && it->is_primary() ) { start_edge = &(*it); break; } } // Walk the edge references and modify to represent medial axis. while (start_edge != NULL) { edge_type * edge = start_edge; //start_edge->color(2); do { // mark visited internal edges (will restore to 0 afterward) edge->color(2); // if next edge is within polygon if (edge->next()->color() == 0 || edge->next()->color() == 2) { if (edge->next()->is_primary()) { // go to next edge within same cell edge = edge->next(); } else { // skip over a non-primary edge to the primary edge that follows it edge_type* prev = edge; edge = edge->next()->twin()->next(); // get foot from non-primary endpoint and // mirror foot info from the non-primary to the twin if (prev->twin()->vertex0() && prev->twin()->vertex1() && prev->next()->vertex1()) { // The reflect about line case is simple: double x = prev->next()->vertex1()->x(); double y = prev->next()->vertex1()->y(); if (!edge->foot()) { edge->foot(x, y); } double x0 = prev->twin()->vertex0()->x(); double y0 = prev->twin()->vertex0()->y(); double x1, y1; // would like to already have foot in place // but not quite there yet, and this performs well if (true || !prev->twin()->foot()) { if (!prev->twin()->is_curved()) { double x1 = prev->twin()->vertex1()->x() + 0; double y1 = prev->twin()->vertex1()->y() + 0; reflect(x, y, x0, y0, x1, y1); prev->twin()->foot(x, y); //printf("reflect foot to line\n"); } else { // The case for a curved edge isn't as simple, but // it seems most feet in this case are already properly // calculated by the event-processing code. // It may be that we never get to, or should never need to // get into this else{}. Maybe eliminate this after foot-finding // in the event-processing has been fully understood and // implemented. // ... "reflect foot for parabola" still happens a lot - // still depending on it if (!prev->twin()->prev()->is_primary()) { //printf("from prev twin prev non-primary\n"); prev->twin()->foot(prev->twin()->prev()->vertex0()->x(), prev->twin()->prev()->vertex0()->y() ); } else { double x = prev->next()->vertex1()->x(); double y = prev->next()->vertex1()->y(); if (!edge->is_curved()) { double x0 = edge->vertex0()->x(); double y0 = edge->vertex0()->y(); double x1 = edge->vertex1()->x(); double y1 = edge->vertex1()->y(); reflect(x, y, x0, y0, x1, y1); prev->twin()->foot(x, y); //printf("reflect foot for parabola\n"); } } } } } // first make the clipped-out edges ahead link to themselves prev->next()->twin()->next(prev->next()); prev->next()->prev(prev->next()->twin()); // now link this to new next prev->next(edge); edge->prev(prev); } } else { // corner - end touches polygon, so turn around edge_type * prev = edge; edge = edge->twin(); if (dbge) { event_log_ += "vertex0()->x())+"\" y1=\""+to_str(prev->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(prev->vertex1()->x())+"\" y2=\""+to_str(prev->vertex1()->y())+"\" />\n"; event_log_ += "vertex0()->x())+"\" y1=\""+to_str(edge->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(edge->vertex1()->x())+"\" y2=\""+to_str(edge->vertex1()->y())+"\" />\n"; } // This may be obsolete now that we're doing corner foot processing in site events // and it actually gives some bad results only in combination with the new // processing there. // It also may be that missing foot code later picks up some of these ? when we // don't do this here. if (false) { // figure feet double theta = atan2(edge->vertex1()->y() - edge->vertex0()->y(), edge->vertex1()->x() - edge->vertex0()->x()); double footx = prev->vertex0()->x() + prev->vertex0()->r(); double footy = prev->vertex0()->y(); // This should always come out <= 1 and > 0. // Sometimes it spills over just beyond 1 in the case of // a corner so shallow it's practically flat. // So snap to 1 if > 1. double for_acos = prev->vertex0()->r() / sqrt(pow(prev->vertex1()->x() - prev->vertex0()->x(),2) + pow(prev->vertex1()->y() - prev->vertex0()->y(),2) ); if (for_acos > 1) { for_acos = 1; } double phi = acos( for_acos ); rotate_2d(footx, footy, theta + phi, prev->vertex0()->x(), prev->vertex0()->y() ); if (!prev->foot()) { prev->foot(footx, footy); } rotate_2d(footx, footy, -2*phi, prev->vertex0()->x(), prev->vertex0()->y() ); if (!edge->next()->foot()) { edge->next()->foot(footx, footy); } if (!edge->foot()) { edge->foot(edge->vertex0()->x(), edge->vertex0()->y()); } } // first connect edges ahead to eachother prev->next()->prev(edge->prev()); edge->prev()->next(prev->next()); if (dbge) { if (prev->next()->vertex0() && prev->next()->vertex1()) { event_log_ += "next()->vertex0()->x())+"\" y1=\""+to_str(prev->next()->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(prev->next()->vertex1()->x())+"\" y2=\""+to_str(prev->next()->vertex1()->y())+"\" />\n"; } if (edge->prev()->vertex0() && edge->prev()->vertex1()) { event_log_ += "prev()->vertex0()->x())+"\" y1=\""+to_str(edge->prev()->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(edge->prev()->vertex1()->x())+"\" y2=\""+to_str(edge->prev()->vertex1()->y())+"\" />\n"; } if (prev->next()->prev()->vertex1() && prev->next()->prev()->vertex0()) { event_log_ += "next()->prev()->vertex0()->x())+"\" y1=\""+to_str(prev->next()->prev()->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(prev->next()->prev()->vertex1()->x())+"\" y2=\""+to_str(prev->next()->prev()->vertex1()->y())+"\" />\n"; } if (edge->prev()->next()->vertex0() && edge->prev()->next()->vertex1()) { event_log_ += "prev()->next()->vertex0()->x())+"\" y1=\""+to_str(edge->prev()->next()->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(edge->prev()->next()->vertex1()->x())+"\" y2=\""+to_str(edge->prev()->next()->vertex1()->y())+"\" />\n"; } } // now link the corner edges together prev->next(edge); edge->prev(prev); if (dbge) { event_log_ += "vertex0()->x())+"\" y1=\""+to_str(prev->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(prev->vertex1()->x())+"\" y2=\""+to_str(prev->vertex1()->y())+"\" />\n"; event_log_ += "vertex0()->x())+"\" y1=\""+to_str(edge->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(edge->vertex1()->x())+"\" y2=\""+to_str(edge->vertex1()->y())+"\" />\n"; event_log_ += "next()->vertex0()->x())+"\" y1=\""+to_str(prev->next()->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(prev->next()->vertex1()->x())+"\" y2=\""+to_str(prev->next()->vertex1()->y())+"\" />\n"; event_log_ += "prev()->vertex0()->x())+"\" y1=\""+to_str(edge->prev()->vertex0()->y())+"\" "; event_log_ += "x2=\""+to_str(edge->prev()->vertex1()->x())+"\" y2=\""+to_str(edge->prev()->vertex1()->y())+"\" />\n"; } } } while (edge != start_edge && edge->color() != 2); // After the first run, any further runs are following internal hole // loops. Find the first edge of the first/next hole. start_edge = NULL; for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (it->color() == 0 && it->is_primary() ) { start_edge = &(*it); break; } } } // Restore color() == 0 for internal edges. for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (it->color() == 2) { it->color(0); } } // add some missing feet event_log_ += "\n"; start_edge = NULL; for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (it->color() == 0 && it->is_primary() ) { start_edge = &(*it); break; } } while (start_edge != NULL) { edge_type * edge = start_edge; do { if (!edge->foot() && edge->next()->foot() && edge->color() == 0 && edge->is_primary() ) { if (edge->cell()->contains_point()) { edge->foot(edge->next()->foot()->x(), edge->next()->foot()->y()); event_log_ += "next()->foot()->x())+"\" cy=\""+to_str(edge->next()->foot()->y())+"\" r=\"110000\" class=\"evtfoot3\"/>\n"; } else { double x = edge->vertex0()->x(); double y = edge->vertex0()->y(); double x0 = edge->next()->foot()->x(); double y0 = edge->next()->foot()->y(); double x1 = edge->next()->vertex0()->x(); double y1 = edge->next()->vertex0()->y(); rotate_2d(x1, y1, 3.14159/2, x0, y0); makefoot(x, y, x0, y0, x1, y1); edge->foot(x, y); event_log_ += "\n"; } //printf("fixed missing foot for consecutive linear edges\n"); if (! edge->prev()->foot() && ( !edge->prev()->is_curved() || edge->prev()->cell()->contains_point() ) && (edge->prev()->color() == 0 || edge->prev()->color() == 2) && edge->prev()->is_primary()) { edge = edge->prev(); edge->color(0); edge = edge->prev(); edge->color(0); } } // mark visited internal edges (will restore to 0 afterward) edge->color(2); edge = edge->next(); } while (edge != start_edge && edge->color() != 2); // After the first run, any further runs are following internal hole // loops. Find the first edge of the first/next hole. start_edge = NULL; for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (it->color() == 0 && it->is_primary() ) { start_edge = &(*it); break; } } } event_log_ += "\n"; // Restore color() == 0 for internal edges. for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (it->color() == 2) { it->color(0); } } // check for any missing feet for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { if (it->color() == 0 && it->is_primary() ) { if (!it->foot()) { //croak("\nNO FOOT\n\n"); printf("NO FOOT\n"); event_log_ += "vertex0()->x())+"\" y1=\""+to_str(it->vertex0()->y())+"\""; event_log_ += " x2=\""+to_str(it->vertex1()->x())+"\" y2=\""+to_str(it->vertex1()->y())+"\"/>\n"; // For debugging, put in placeholders for missing feet // in some rediculous location, so we can still get some kind of // output without a segfault. it->foot(0, 0); } if (it->next() && !it->next()->next()) {printf("NO NEXT\n\n");} } } // Debug reporting /* if (0) { printf("original edges\n"); printf("srcInd isInf curved color"); printf(" this twin next prev point\n"); for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { printf("%3d %5s %7s %2d ", it->cell()->source_index(), (it->is_finite() ? " ":" INF "), (it->is_curved() ? " curve ":" line "), it->color() ); printf("%llu, %llu , %llu, %llu ", (unsigned long long int) &(*it), (unsigned long long int) it->twin(), (unsigned long long int) it->next(), (unsigned long long int) it->prev() ); if (it->vertex0()) { printf("[%f , %f , %f]", it->vertex0()->x(), it->vertex0()->y(), it->vertex0()->r() ); } else {printf("no vert0");} printf("\n"); } } */ } private: typedef typename cell_container_type::iterator cell_iterator; typedef typename vertex_container_type::iterator vertex_iterator; typedef typename edge_container_type::iterator edge_iterator; typedef typename TRAITS::vertex_equality_predicate_type vertex_equality_predicate_type; template bool is_primary_edge(const SEvent& site1, const SEvent& site2) const { bool flag1 = site1.is_segment(); bool flag2 = site2.is_segment(); if (flag1 && !flag2) { return (site1.point0() != site2.point0()) && (site1.point1() != site2.point0()); } if (!flag1 && flag2) { return (site2.point0() != site1.point0()) && (site2.point1() != site1.point0()); } return true; } template bool is_linear_edge(const SEvent& site1, const SEvent& site2) const { if (!is_primary_edge(site1, site2)) { return true; } return !(site1.is_segment() ^ site2.is_segment()); } // Remove degenerate edge. void remove_edge(edge_type* edge) { // Are these two ifs necessary? // Put these in for debugging, where the problem was something else, // but these do fill in/transfer some missing feet. // After revising the foot-finding (trying to do it all in the sweepline // event processing), see if these are still needed. if (edge->foot() && !edge->next()->foot()) { edge->next()->foot(edge->foot()->x(), edge->foot()->y()); } if (edge->twin()->foot() && !edge->twin()->next()->foot()) { edge->twin()->next()->foot(edge->twin()->foot()->x(), edge->twin()->foot()->y()); } // Update the endpoints of the incident edges to the second vertex. vertex_type* vertex = edge->vertex0(); edge_type* updated_edge = edge->twin()->rot_next(); while (updated_edge != edge->twin()) { updated_edge->vertex0(vertex); updated_edge = updated_edge->rot_next(); } edge_type* edge1 = edge; edge_type* edge2 = edge->twin(); edge_type* edge1_rot_prev = edge1->rot_prev(); edge_type* edge1_rot_next = edge1->rot_next(); edge_type* edge2_rot_prev = edge2->rot_prev(); edge_type* edge2_rot_next = edge2->rot_next(); // Update prev/next pointers for the incident edges. edge1_rot_next->twin()->next(edge2_rot_prev); edge2_rot_prev->prev(edge1_rot_next->twin()); edge1_rot_prev->prev(edge2_rot_next->twin()); edge2_rot_next->twin()->next(edge1_rot_prev); } void mark_exterior(edge_type* edge) { if (edge->color() == 1) { return; } edge->color(1); edge->twin()->color(1); edge->cell()->color(1); edge->twin()->cell()->color(1); vertex_type* v = edge->vertex1(); if (!v) {v = edge->vertex0();} if (v == NULL || !edge->is_primary()) { return; } v->color(1); edge_type* e = v->incident_edge(); do { mark_exterior(e); e = e->rot_next(); } while (e != v->incident_edge()); } void mark_interior(edge_type* edge, bool backward = false) { // This function seems to work as intended, though it's still // on probation. The conditionals in the do {} while(); might not all be // correct or necessary (or they might be). edge->color(0); edge->twin()->color(0); vertex_type* v = edge->vertex0(); edge_type* e; if (edge->is_curved()) { edge_type* start_e = (edge->cell()->contains_point()) ? edge : edge->twin(); e = start_e; do { if (!e->is_primary()) { e->color(0); e->twin()->color(0); } e = e->next(); } while (e != start_e); } if (!backward) { v = edge->vertex1(); } if (!v) { return; } e = v->incident_edge(); v->color(0); e = v->incident_edge(); do { if (e->is_primary() && e->next()->is_primary()) { if (e->color() == 0 && e->next()->color() != 0) { mark_interior(e->next()); } if (e->color() != 0 && e->next()->color() == 0) { mark_interior(e, true); } } if (e->is_primary() && e->prev()->is_primary()) { if (e->color() == 0 && e->prev()->color() != 0) { mark_interior(e->prev(), true); } if (e->color() != 0 && e->prev()->color() == 0) { mark_interior(e); } } e = e->rot_next(); } while (e != v->incident_edge()); } bool is_exterior (const edge_type& e) { return (e->color() != 0); } void rotate_2d(double &x, double &y, const double theta, const double xo = 0, const double yo = 0) { double xp; x -= xo; y -= yo; xp = (x * cos(theta) - y * sin(theta)) + xo; y = (y * cos(theta) + x * sin(theta)) + yo; x = xp; } template void reflect(CT &x, CT &y, const CT x0, const CT y0, const CT x1, const CT y1) { double dy = (double) (y1 - y0); double dx = (double) (x1 - x0); if (dy == 0 && dx == 0) {return;} double theta = atan2(dy, dx); rotate_2d(x, y, -theta, x0, y0); y -= y0; y *= -1.0; y += y0; rotate_2d(x, y, theta, x0, y0); } void makefoot(double & x, double & y, const double x0, const double y0, const double x1, const double y1) { // infinite slope case first if (x1 - x0 == 0) { x = x0; } else { double m = (y1 - y0)/(x1 - x0); if (m == 0) { y = y0; } else { double intersect_x = ((m * x0) - y0 + ((1 / m) * x) + (y)) / (m + (1 / m)); double intersect_y = -(x0 - intersect_x) * m + y0; x = intersect_x; y = intersect_y; } } } cell_container_type cells_; vertex_container_type vertices_; edge_container_type edges_; std::string event_log_; vertex_equality_predicate_type vertex_equality_predicate_; // Disallow copy constructor and operator= medial_axis(const medial_axis&); void operator=(const medial_axis&); }; } // polygon } // boost #endif // BOOST_POLYGON_MEDIAL_AXIS mline2av.h000444000765000024 331512161110667 17032 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src#ifndef bgu_mline2av_h_ #define bgu_mline2av_h_ #include "myinit.h" #include SV* multi_linestring2perl(pTHX_ const multi_linestring& mls) { AV* av = newAV(); const unsigned int size = mls.size(); av_extend(av, size-1); for (int i = 0; i < size; i++) { AV* lineav = newAV(); linestring ls = mls[i]; av_store(av, i, newRV_noinc((SV*)lineav)); av_fill(lineav, 1); const unsigned int line_len = boost::geometry::num_points(ls); for (int j = 0; j < line_len; j++) { AV* pointav = newAV(); av_store(lineav, j, newRV_noinc((SV*)pointav)); av_fill(pointav, 1); av_store_point_xy(pointav, ls[j].x(), ls[j].y()); } } return (SV*)newRV_noinc((SV*)av); } void add_line(AV* theAv, multi_linestring* mls) { using boost::geometry::make; const unsigned int len = av_len(theAv)+1; SV** elem; AV* innerav; linestring ls; for (unsigned int i = 0; i < len; i++) { elem = av_fetch(theAv, i, 0); if (!SvROK(*elem) || SvTYPE(SvRV(*elem)) != SVt_PVAV || av_len((AV*)SvRV(*elem)) < 1) { return; } innerav = (AV*)SvRV(*elem); ls.push_back(av_fetch_point_xy(innerav)); } mls->push_back(ls); } multi_linestring* perl2multi_linestring(pTHX_ AV* theAv) { const unsigned int len = av_len(theAv)+1; multi_linestring* retval = new multi_linestring(); SV** elem; AV* innerav; for (unsigned int i = 0; i < len; i++) { elem = av_fetch(theAv, i, 0); if (!SvROK(*elem) || SvTYPE(SvRV(*elem)) != SVt_PVAV || av_len((AV*)SvRV(*elem)) < 1) { delete retval; return NULL; } add_line((AV*)SvRV(*elem), retval); } return retval; } #endif myinit.h000444000765000024 372512161110675 16632 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src#undef read #undef bind #undef times #undef open #undef seekdir #undef setbuf #undef abort #undef close #undef select #include #include #include #include #include #include #include #include #include #include #include typedef boost::geometry::model::d2::point_xy point_xy; typedef boost::geometry::model::polygon polygon; typedef boost::geometry::model::multi_polygon multi_polygon; typedef boost::geometry::model::linestring linestring; typedef boost::geometry::model::multi_linestring multi_linestring; typedef boost::geometry::model::ring ring; /* Boost::Polygon::Voronoi's default config calls for 32 bit integer input. */ typedef boost::polygon::point_data bp_point_xy; // Support old API typedef boost::geometry::model::polygon opolygon; typedef boost::geometry::model::multi_polygon omultipolygon; typedef boost::geometry::model::multi_linestring omultilinestring; // for av_fetch, use SvIV() // this library then supports 64 bit ints. #define av_fetch_x(AV) SvNV(*av_fetch(AV, 0, 0)) #define av_fetch_y(AV) SvNV(*av_fetch(AV, 1, 0)) // for av_store, use newSViv() #define av_store_point_xy(AV, X, Y) \ av_store(AV, 0, newSVnv(X)); \ av_store(AV, 1, newSVnv(Y)) #define av_fetch_point_xy(AV) \ make(av_fetch_x(AV), av_fetch_y(AV)) #include "poly2av.h" #include "mline2av.h" #include "point2av.h" #include "line2av.h" #include "medial_axis.hpp" #include "voronoi2perl.h" point2av.h000444000765000024 63412161110662 17033 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src#ifndef bgu_point2av_h_ #define bgu_point2av_h_ #include "myinit.h" SV* point_xy2perl(pTHX_ const point_xy& point) { AV* av = newAV(); av_fill(av, 1); av_store_point_xy(av, point.x(), point.y()); return (SV*)newRV_noinc((SV*)av); } point_xy* perl2point_xy(pTHX_ AV* theAv) { using boost::geometry::make; point_xy* retval = new point_xy(av_fetch_point_xy(theAv)); return retval; } #endif poly2av.h000444000765000024 776412161110657 16724 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src#ifndef bgu_poly2av_h_ #define bgu_poly2av_h_ #include #include "myinit.h" #include void add_ring_perl(AV* polygon_av, ring& theRing) { AV* ring_av = newAV(); AV* point_av; // number of points in the ring const unsigned int len = boost::geometry::num_points(theRing); av_extend(ring_av, len-1); //fprintf(stderr, "Points in ring: len=%d\n", len); for(unsigned int i = 0; i < len; i++) { point_av = newAV(); av_store(ring_av, i, newRV_noinc((SV*)point_av)); av_fill(point_av, 1); av_store_point_xy(point_av, theRing[i].x(), theRing[i].y()); } av_push(polygon_av, newRV_noinc((SV*)ring_av)); } SV* polygon2perl(pTHX_ const polygon& poly) { AV* av = newAV(); ring my_ring = poly.outer(); add_ring_perl(av, my_ring); std::vector::size_type sz = poly.inners().size(); for (unsigned i = 0; i < sz; i++) { my_ring = poly.inners()[i]; add_ring_perl(av, my_ring); } return (SV*)newRV_noinc((SV*)av); } SV* multi_polygon2perl(pTHX_ const multi_polygon& multi_poly) { AV* av = newAV(); // number of polygons in this multi_polygon std::size_t poly_count = boost::geometry::num_geometries(multi_poly); for (unsigned i = 0; i < poly_count; i++) { polygon poly = multi_poly[i]; AV* polyav = newAV(); // add contour ring my_ring = poly.outer(); add_ring_perl(polyav, my_ring); // add holes std::vector::size_type sz = poly.inners().size(); for (unsigned j= 0; j < sz; j++) { my_ring = poly.inners()[j]; add_ring_perl(polyav, my_ring); } av_push(av, newRV_noinc((SV*)polyav)); } return (SV*)newRV_noinc((SV*)av); } int add_ring(AV* theAv, polygon& poly, const int ring_index) { using boost::geometry::append; using boost::geometry::make; const unsigned int len = av_len(theAv)+1; SV** elem; AV* innerav; for (unsigned int i = 0; i < len; i++) { elem = av_fetch(theAv, i, 0); if (!SvROK(*elem) || SvTYPE(SvRV(*elem)) != SVt_PVAV || av_len((AV*)SvRV(*elem)) != 1) // require two coordinates per point { return 0; } innerav = (AV*)SvRV(*elem); append(poly, av_fetch_point_xy(innerav), ring_index); } return 1; } polygon* perl2polygon(pTHX_ AV* theAv) { using boost::geometry::interior_rings; // read number of input rings const unsigned int len = av_len(theAv)+1; // initialize resulting polygon polygon* retval = new polygon(); // create interior rings (append doesn't create them automatically) interior_rings(*retval).resize(len-1); SV** elem; for (unsigned int i = 0; i < len; i++) { // validate input data elem = av_fetch(theAv, i, 0); if (!SvROK(*elem) || SvTYPE(SvRV(*elem)) != SVt_PVAV || av_len((AV*)SvRV(*elem)) < 1) // require at least two points in ring { delete retval; return NULL; } // append point to ring i-1 (-1 is outer ring) if (!add_ring((AV*)SvRV(*elem), *retval, i-1)) { delete retval; return NULL; } } return retval; } multi_polygon* perl2multi_polygon(pTHX_ AV* theAv) { // initialize resulting multi_polygon multi_polygon* retval = new multi_polygon(); SV** elem; const unsigned int len = av_len(theAv)+1; for (unsigned int i = 0; i < len; i++) { // validate input data elem = av_fetch(theAv, i, 0); if (!SvROK(*elem) || SvTYPE(SvRV(*elem)) != SVt_PVAV || av_len((AV*)SvRV(*elem)) < 0) // require at least one polygon { delete retval; return NULL; } polygon* poly = perl2polygon(aTHX_ (AV*)SvRV(*elem)); retval->push_back(*poly); delete poly; } return retval; } #endif ppport.h000444000765000024 52540612161110667 16713 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src#if 0 <<'SKIP'; #endif /* ---------------------------------------------------------------------- ppport.h -- Perl/Pollution/Portability Version 3.19 Automatically created by Devel::PPPort running under perl 5.010000. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. Use 'perldoc ppport.h' to view the documentation below. ---------------------------------------------------------------------- SKIP =pod =head1 NAME ppport.h - Perl/Pollution/Portability version 3.19 =head1 SYNOPSIS perl ppport.h [options] [source files] Searches current directory for files if no [source files] are given --help show short help --version show version --patch=file write one patch file with changes --copy=suffix write changed copies with suffix --diff=program use diff program and options --compat-version=version provide compatibility with Perl version --cplusplus accept C++ comments --quiet don't output anything except fatal errors --nodiag don't show diagnostics --nohints don't show hints --nochanges don't suggest changes --nofilter don't filter input files --strip strip all script and doc functionality from ppport.h --list-provided list provided API --list-unsupported list unsupported API --api-info=name show Perl API portability information =head1 COMPATIBILITY This version of F is designed to support operation with Perl installations back to 5.003, and has been tested up to 5.10.0. =head1 OPTIONS =head2 --help Display a brief usage summary. =head2 --version Display the version of F. =head2 --patch=I If this option is given, a single patch file will be created if any changes are suggested. This requires a working diff program to be installed on your system. =head2 --copy=I If this option is given, a copy of each file will be saved with the given suffix that contains the suggested changes. This does not require any external programs. Note that this does not automagially add a dot between the original filename and the suffix. If you want the dot, you have to include it in the option argument. If neither C<--patch> or C<--copy> are given, the default is to simply print the diffs for each file. This requires either C or a C program to be installed. =head2 --diff=I Manually set the diff program and options to use. The default is to use C, when installed, and output unified context diffs. =head2 --compat-version=I Tell F to check for compatibility with the given Perl version. The default is to check for compatibility with Perl version 5.003. You can use this option to reduce the output of F if you intend to be backward compatible only down to a certain Perl version. =head2 --cplusplus Usually, F will detect C++ style comments and replace them with C style comments for portability reasons. Using this option instructs F to leave C++ comments untouched. =head2 --quiet Be quiet. Don't print anything except fatal errors. =head2 --nodiag Don't output any diagnostic messages. Only portability alerts will be printed. =head2 --nohints Don't output any hints. Hints often contain useful portability notes. Warnings will still be displayed. =head2 --nochanges Don't suggest any changes. Only give diagnostic output and hints unless these are also deactivated. =head2 --nofilter Don't filter the list of input files. By default, files not looking like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. =head2 --strip Strip all script and documentation functionality from F. This reduces the size of F dramatically and may be useful if you want to include F in smaller modules without increasing their distribution size too much. The stripped F will have a C<--unstrip> option that allows you to undo the stripping, but only if an appropriate C module is installed. =head2 --list-provided Lists the API elements for which compatibility is provided by F. Also lists if it must be explicitly requested, if it has dependencies, and if there are hints or warnings for it. =head2 --list-unsupported Lists the API elements that are known not to be supported by F and below which version of Perl they probably won't be available or work. =head2 --api-info=I Show portability information for API elements matching I. If I is surrounded by slashes, it is interpreted as a regular expression. =head1 DESCRIPTION In order for a Perl extension (XS) module to be as portable as possible across differing versions of Perl itself, certain steps need to be taken. =over 4 =item * Including this header is the first major one. This alone will give you access to a large part of the Perl API that hasn't been available in earlier Perl releases. Use perl ppport.h --list-provided to see which API elements are provided by ppport.h. =item * You should avoid using deprecated parts of the API. For example, using global Perl variables without the C prefix is deprecated. Also, some API functions used to have a C prefix. Using this form is also deprecated. You can safely use the supported API, as F will provide wrappers for older Perl versions. =item * If you use one of a few functions or variables that were not present in earlier versions of Perl, and that can't be provided using a macro, you have to explicitly request support for these functions by adding one or more C<#define>s in your source code before the inclusion of F. These functions or variables will be marked C in the list shown by C<--list-provided>. Depending on whether you module has a single or multiple files that use such functions or variables, you want either C or global variants. For a C function or variable (used only in a single source file), use: #define NEED_function #define NEED_variable For a global function or variable (used in multiple source files), use: #define NEED_function_GLOBAL #define NEED_variable_GLOBAL Note that you mustn't have more than one global request for the same function or variable in your project. Function / Variable Static Request Global Request ----------------------------------------------------------------------------------------- PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL grok_number() NEED_grok_number NEED_grok_number_GLOBAL grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL load_module() NEED_load_module NEED_load_module_GLOBAL my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL newSV_type() NEED_newSV_type NEED_newSV_type_GLOBAL newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL pv_display() NEED_pv_display NEED_pv_display_GLOBAL pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL vload_module() NEED_vload_module NEED_vload_module_GLOBAL vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL warner() NEED_warner NEED_warner_GLOBAL To avoid namespace conflicts, you can change the namespace of the explicitly exported functions / variables using the C macro. Just C<#define> the macro before including C: #define DPPP_NAMESPACE MyOwnNamespace_ #include "ppport.h" The default namespace is C. =back The good thing is that most of the above can be checked by running F on your source code. See the next section for details. =head1 EXAMPLES To verify whether F is needed for your module, whether you should make any changes to your code, and whether any special defines should be used, F can be run as a Perl script to check your source code. Simply say: perl ppport.h The result will usually be a list of patches suggesting changes that should at least be acceptable, if not necessarily the most efficient solution, or a fix for all possible problems. If you know that your XS module uses features only available in newer Perl releases, if you're aware that it uses C++ comments, and if you want all suggestions as a single patch file, you could use something like this: perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff If you only want your code to be scanned without any suggestions for changes, use: perl ppport.h --nochanges You can specify a different C program or options, using the C<--diff> option: perl ppport.h --diff='diff -C 10' This would output context diffs with 10 lines of context. If you want to create patched copies of your files instead, use: perl ppport.h --copy=.new To display portability information for the C function, use: perl ppport.h --api-info=newSVpvn Since the argument to C<--api-info> can be a regular expression, you can use perl ppport.h --api-info=/_nomg$/ to display portability information for all C<_nomg> functions or perl ppport.h --api-info=/./ to display information for all known API elements. =head1 BUGS If this version of F is causing failure during the compilation of this module, please check if newer versions of either this module or C are available on CPAN before sending a bug report. If F was generated using the latest version of C and is causing failure of this module, please file a bug report using the CPAN Request Tracker at L. Please include the following information: =over 4 =item 1. The complete output from running "perl -V" =item 2. This file. =item 3. The name and version of the module you were trying to build. =item 4. A full log of the build that failed. =item 5. Any other information that you think could be relevant. =back For the latest version of this code, please get the C module from CPAN. =head1 COPYRIGHT Version 3.x, Copyright (c) 2004-2009, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. Version 1.x, Copyright (C) 1999, Kenneth Albanowski. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO See L. =cut use strict; # Disable broken TRIE-optimization BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } my $VERSION = 3.19; my %opt = ( quiet => 0, diag => 1, hints => 1, changes => 1, cplusplus => 0, filter => 1, strip => 0, version => 0, ); my($ppport) = $0 =~ /([\w.]+)$/; my $LF = '(?:\r\n|[\r\n])'; # line feed my $HS = "[ \t]"; # horizontal whitespace # Never use C comments in this file! my $ccs = '/'.'*'; my $cce = '*'.'/'; my $rccs = quotemeta $ccs; my $rcce = quotemeta $cce; eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( help quiet diag! filter! hints! changes! cplusplus strip version patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); }; if ($@ and grep /^-/, @ARGV) { usage() if "@ARGV" =~ /^--?h(?:elp)?$/; die "Getopt::Long not found. Please don't use any options.\n"; } if ($opt{version}) { print "This is $0 $VERSION.\n"; exit 0; } usage() if $opt{help}; strip() if $opt{strip}; if (exists $opt{'compat-version'}) { my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; if ($@) { die "Invalid version number format: '$opt{'compat-version'}'\n"; } die "Only Perl 5 is supported\n" if $r != 5; die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; } else { $opt{'compat-version'} = 5; } my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ ? ( $1 => { ($2 ? ( base => $2 ) : ()), ($3 ? ( todo => $3 ) : ()), (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), } ) : die "invalid spec: $_" } qw( AvFILLp|5.004050||p AvFILL||| CLASS|||n CPERLscope|5.005000||p CX_CURPAD_SAVE||| CX_CURPAD_SV||| CopFILEAV|5.006000||p CopFILEGV_set|5.006000||p CopFILEGV|5.006000||p CopFILESV|5.006000||p CopFILE_set|5.006000||p CopFILE|5.006000||p CopSTASHPV_set|5.006000||p CopSTASHPV|5.006000||p CopSTASH_eq|5.006000||p CopSTASH_set|5.006000||p CopSTASH|5.006000||p CopyD|5.009002||p Copy||| CvPADLIST||| CvSTASH||| CvWEAKOUTSIDE||| DEFSV_set|5.011000||p DEFSV|5.004050||p END_EXTERN_C|5.005000||p ENTER||| ERRSV|5.004050||p EXTEND||| EXTERN_C|5.005000||p F0convert|||n FREETMPS||| GIMME_V||5.004000|n GIMME|||n GROK_NUMERIC_RADIX|5.007002||p G_ARRAY||| G_DISCARD||| G_EVAL||| G_METHOD|5.006001||p G_NOARGS||| G_SCALAR||| G_VOID||5.004000| GetVars||| GvSVn|5.009003||p GvSV||| Gv_AMupdate||| HEf_SVKEY||5.004000| HeHASH||5.004000| HeKEY||5.004000| HeKLEN||5.004000| HePV||5.004000| HeSVKEY_force||5.004000| HeSVKEY_set||5.004000| HeSVKEY||5.004000| HeUTF8||5.011000| HeVAL||5.004000| HvNAMELEN_get|5.009003||p HvNAME_get|5.009003||p HvNAME||| INT2PTR|5.006000||p IN_LOCALE_COMPILETIME|5.007002||p IN_LOCALE_RUNTIME|5.007002||p IN_LOCALE|5.007002||p IN_PERL_COMPILETIME|5.008001||p IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p IS_NUMBER_INFINITY|5.007002||p IS_NUMBER_IN_UV|5.007002||p IS_NUMBER_NAN|5.007003||p IS_NUMBER_NEG|5.007002||p IS_NUMBER_NOT_INT|5.007002||p IVSIZE|5.006000||p IVTYPE|5.006000||p IVdf|5.006000||p LEAVE||| LVRET||| MARK||| MULTICALL||5.011000| MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p MoveD|5.009002||p Move||| NOOP|5.005000||p NUM2PTR|5.006000||p NVTYPE|5.006000||p NVef|5.006001||p NVff|5.006001||p NVgf|5.006001||p Newxc|5.009003||p Newxz|5.009003||p Newx|5.009003||p Nullav||| Nullch||| Nullcv||| Nullhv||| Nullsv||| ORIGMARK||| PAD_BASE_SV||| PAD_CLONE_VARS||| PAD_COMPNAME_FLAGS||| PAD_COMPNAME_GEN_set||| PAD_COMPNAME_GEN||| PAD_COMPNAME_OURSTASH||| PAD_COMPNAME_PV||| PAD_COMPNAME_TYPE||| PAD_DUP||| PAD_RESTORE_LOCAL||| PAD_SAVE_LOCAL||| PAD_SAVE_SETNULLPAD||| PAD_SETSV||| PAD_SET_CUR_NOSAVE||| PAD_SET_CUR||| PAD_SVl||| PAD_SV||| PERLIO_FUNCS_CAST|5.009003||p PERLIO_FUNCS_DECL|5.009003||p PERL_ABS|5.008001||p PERL_BCDVERSION|5.011000||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p PERL_HASH|5.004000||p PERL_INT_MAX|5.004000||p PERL_INT_MIN|5.004000||p PERL_LONG_MAX|5.004000||p PERL_LONG_MIN|5.004000||p PERL_MAGIC_arylen|5.007002||p PERL_MAGIC_backref|5.007002||p PERL_MAGIC_bm|5.007002||p PERL_MAGIC_collxfrm|5.007002||p PERL_MAGIC_dbfile|5.007002||p PERL_MAGIC_dbline|5.007002||p PERL_MAGIC_defelem|5.007002||p PERL_MAGIC_envelem|5.007002||p PERL_MAGIC_env|5.007002||p PERL_MAGIC_ext|5.007002||p PERL_MAGIC_fm|5.007002||p PERL_MAGIC_glob|5.011000||p PERL_MAGIC_isaelem|5.007002||p PERL_MAGIC_isa|5.007002||p PERL_MAGIC_mutex|5.011000||p PERL_MAGIC_nkeys|5.007002||p PERL_MAGIC_overload_elem|5.007002||p PERL_MAGIC_overload_table|5.007002||p PERL_MAGIC_overload|5.007002||p PERL_MAGIC_pos|5.007002||p PERL_MAGIC_qr|5.007002||p PERL_MAGIC_regdata|5.007002||p PERL_MAGIC_regdatum|5.007002||p PERL_MAGIC_regex_global|5.007002||p PERL_MAGIC_shared_scalar|5.007003||p PERL_MAGIC_shared|5.007003||p PERL_MAGIC_sigelem|5.007002||p PERL_MAGIC_sig|5.007002||p PERL_MAGIC_substr|5.007002||p PERL_MAGIC_sv|5.007002||p PERL_MAGIC_taint|5.007002||p PERL_MAGIC_tiedelem|5.007002||p PERL_MAGIC_tiedscalar|5.007002||p PERL_MAGIC_tied|5.007002||p PERL_MAGIC_utf8|5.008001||p PERL_MAGIC_uvar_elem|5.007003||p PERL_MAGIC_uvar|5.007002||p PERL_MAGIC_vec|5.007002||p PERL_MAGIC_vstring|5.008001||p PERL_PV_ESCAPE_ALL|5.009004||p PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p PERL_PV_ESCAPE_NOCLEAR|5.009004||p PERL_PV_ESCAPE_QUOTE|5.009004||p PERL_PV_ESCAPE_RE|5.009005||p PERL_PV_ESCAPE_UNI_DETECT|5.009004||p PERL_PV_ESCAPE_UNI|5.009004||p PERL_PV_PRETTY_DUMP|5.009004||p PERL_PV_PRETTY_ELLIPSES|5.010000||p PERL_PV_PRETTY_LTGT|5.009004||p PERL_PV_PRETTY_NOCLEAR|5.010000||p PERL_PV_PRETTY_QUOTE|5.009004||p PERL_PV_PRETTY_REGPROP|5.009004||p PERL_QUAD_MAX|5.004000||p PERL_QUAD_MIN|5.004000||p PERL_REVISION|5.006000||p PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p PERL_SCAN_DISALLOW_PREFIX|5.007003||p PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p PERL_SCAN_SILENT_ILLDIGIT|5.008001||p PERL_SHORT_MAX|5.004000||p PERL_SHORT_MIN|5.004000||p PERL_SIGNALS_UNSAFE_FLAG|5.008001||p PERL_SUBVERSION|5.006000||p PERL_SYS_INIT3||5.006000| PERL_SYS_INIT||| PERL_SYS_TERM||5.011000| PERL_UCHAR_MAX|5.004000||p PERL_UCHAR_MIN|5.004000||p PERL_UINT_MAX|5.004000||p PERL_UINT_MIN|5.004000||p PERL_ULONG_MAX|5.004000||p PERL_ULONG_MIN|5.004000||p PERL_UNUSED_ARG|5.009003||p PERL_UNUSED_CONTEXT|5.009004||p PERL_UNUSED_DECL|5.007002||p PERL_UNUSED_VAR|5.007002||p PERL_UQUAD_MAX|5.004000||p PERL_UQUAD_MIN|5.004000||p PERL_USE_GCC_BRACE_GROUPS|5.009004||p PERL_USHORT_MAX|5.004000||p PERL_USHORT_MIN|5.004000||p PERL_VERSION|5.006000||p PL_DBsignal|5.005000||p PL_DBsingle|||pn PL_DBsub|||pn PL_DBtrace|||pn PL_Sv|5.005000||p PL_bufend|5.011000||p PL_bufptr|5.011000||p PL_compiling|5.004050||p PL_copline|5.011000||p PL_curcop|5.004050||p PL_curstash|5.004050||p PL_debstash|5.004050||p PL_defgv|5.004050||p PL_diehook|5.004050||p PL_dirty|5.004050||p PL_dowarn|||pn PL_errgv|5.004050||p PL_error_count|5.011000||p PL_expect|5.011000||p PL_hexdigit|5.005000||p PL_hints|5.005000||p PL_in_my_stash|5.011000||p PL_in_my|5.011000||p PL_last_in_gv|||n PL_laststatval|5.005000||p PL_lex_state|5.011000||p PL_lex_stuff|5.011000||p PL_linestr|5.011000||p PL_modglobal||5.005000|n PL_na|5.004050||pn PL_no_modify|5.006000||p PL_ofsgv|||n PL_parser|5.009005||p PL_perl_destruct_level|5.004050||p PL_perldb|5.004050||p PL_ppaddr|5.006000||p PL_rsfp_filters|5.004050||p PL_rsfp|5.004050||p PL_rs|||n PL_signals|5.008001||p PL_stack_base|5.004050||p PL_stack_sp|5.004050||p PL_statcache|5.005000||p PL_stdingv|5.004050||p PL_sv_arenaroot|5.004050||p PL_sv_no|5.004050||pn PL_sv_undef|5.004050||pn PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p PL_tokenbuf|5.011000||p POP_MULTICALL||5.011000| POPi|||n POPl|||n POPn|||n POPpbytex||5.007001|n POPpx||5.005030|n POPp|||n POPs|||n PTR2IV|5.006000||p PTR2NV|5.006000||p PTR2UV|5.006000||p PTR2nat|5.009003||p PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| PUSH_MULTICALL||5.011000| PUSHi||| PUSHmortal|5.009002||p PUSHn||| PUSHp||| PUSHs||| PUSHu|5.004000||p PUTBACK||| PerlIO_clearerr||5.007003| PerlIO_close||5.007003| PerlIO_context_layers||5.009004| PerlIO_eof||5.007003| PerlIO_error||5.007003| PerlIO_fileno||5.007003| PerlIO_fill||5.007003| PerlIO_flush||5.007003| PerlIO_get_base||5.007003| PerlIO_get_bufsiz||5.007003| PerlIO_get_cnt||5.007003| PerlIO_get_ptr||5.007003| PerlIO_read||5.007003| PerlIO_seek||5.007003| PerlIO_set_cnt||5.007003| PerlIO_set_ptrcnt||5.007003| PerlIO_setlinebuf||5.007003| PerlIO_stderr||5.007003| PerlIO_stdin||5.007003| PerlIO_stdout||5.007003| PerlIO_tell||5.007003| PerlIO_unread||5.007003| PerlIO_write||5.007003| Perl_signbit||5.009005|n PoisonFree|5.009004||p PoisonNew|5.009004||p PoisonWith|5.009004||p Poison|5.008000||p RETVAL|||n Renewc||| Renew||| SAVECLEARSV||| SAVECOMPPAD||| SAVEPADSV||| SAVETMPS||| SAVE_DEFSV|5.004050||p SPAGAIN||| SP||| START_EXTERN_C|5.005000||p START_MY_CXT|5.007003||p STMT_END|||p STMT_START|||p STR_WITH_LEN|5.009003||p ST||| SV_CONST_RETURN|5.009003||p SV_COW_DROP_PV|5.008001||p SV_COW_SHARED_HASH_KEYS|5.009005||p SV_GMAGIC|5.007002||p SV_HAS_TRAILING_NUL|5.009004||p SV_IMMEDIATE_UNREF|5.007001||p SV_MUTABLE_RETURN|5.009003||p SV_NOSTEAL|5.009002||p SV_SMAGIC|5.009003||p SV_UTF8_NO_ENCODING|5.008001||p SVfARG|5.009005||p SVf_UTF8|5.006000||p SVf|5.006000||p SVt_IV||| SVt_NV||| SVt_PVAV||| SVt_PVCV||| SVt_PVHV||| SVt_PVMG||| SVt_PV||| Safefree||| Slab_Alloc||| Slab_Free||| Slab_to_rw||| StructCopy||| SvCUR_set||| SvCUR||| SvEND||| SvGAMAGIC||5.006001| SvGETMAGIC|5.004050||p SvGROW||| SvIOK_UV||5.006000| SvIOK_notUV||5.006000| SvIOK_off||| SvIOK_only_UV||5.006000| SvIOK_only||| SvIOK_on||| SvIOKp||| SvIOK||| SvIVX||| SvIV_nomg|5.009001||p SvIV_set||| SvIVx||| SvIV||| SvIsCOW_shared_hash||5.008003| SvIsCOW||5.008003| SvLEN_set||| SvLEN||| SvLOCK||5.007003| SvMAGIC_set|5.009003||p SvNIOK_off||| SvNIOKp||| SvNIOK||| SvNOK_off||| SvNOK_only||| SvNOK_on||| SvNOKp||| SvNOK||| SvNVX||| SvNV_set||| SvNVx||| SvNV||| SvOK||| SvOOK_offset||5.011000| SvOOK||| SvPOK_off||| SvPOK_only_UTF8||5.006000| SvPOK_only||| SvPOK_on||| SvPOKp||| SvPOK||| SvPVX_const|5.009003||p SvPVX_mutable|5.009003||p SvPVX||| SvPV_const|5.009003||p SvPV_flags_const_nolen|5.009003||p SvPV_flags_const|5.009003||p SvPV_flags_mutable|5.009003||p SvPV_flags|5.007002||p SvPV_force_flags_mutable|5.009003||p SvPV_force_flags_nolen|5.009003||p SvPV_force_flags|5.007002||p SvPV_force_mutable|5.009003||p SvPV_force_nolen|5.009003||p SvPV_force_nomg_nolen|5.009003||p SvPV_force_nomg|5.007002||p SvPV_force|||p SvPV_mutable|5.009003||p SvPV_nolen_const|5.009003||p SvPV_nolen|5.006000||p SvPV_nomg_const_nolen|5.009003||p SvPV_nomg_const|5.009003||p SvPV_nomg|5.007002||p SvPV_renew|5.009003||p SvPV_set||| SvPVbyte_force||5.009002| SvPVbyte_nolen||5.006000| SvPVbytex_force||5.006000| SvPVbytex||5.006000| SvPVbyte|5.006000||p SvPVutf8_force||5.006000| SvPVutf8_nolen||5.006000| SvPVutf8x_force||5.006000| SvPVutf8x||5.006000| SvPVutf8||5.006000| SvPVx||| SvPV||| SvREFCNT_dec||| SvREFCNT_inc_NN|5.009004||p SvREFCNT_inc_simple_NN|5.009004||p SvREFCNT_inc_simple_void_NN|5.009004||p SvREFCNT_inc_simple_void|5.009004||p SvREFCNT_inc_simple|5.009004||p SvREFCNT_inc_void_NN|5.009004||p SvREFCNT_inc_void|5.009004||p SvREFCNT_inc|||p SvREFCNT||| SvROK_off||| SvROK_on||| SvROK||| SvRV_set|5.009003||p SvRV||| SvRXOK||5.009005| SvRX||5.009005| SvSETMAGIC||| SvSHARED_HASH|5.009003||p SvSHARE||5.007003| SvSTASH_set|5.009003||p SvSTASH||| SvSetMagicSV_nosteal||5.004000| SvSetMagicSV||5.004000| SvSetSV_nosteal||5.004000| SvSetSV||| SvTAINTED_off||5.004000| SvTAINTED_on||5.004000| SvTAINTED||5.004000| SvTAINT||| SvTRUE||| SvTYPE||| SvUNLOCK||5.007003| SvUOK|5.007001|5.006000|p SvUPGRADE||| SvUTF8_off||5.006000| SvUTF8_on||5.006000| SvUTF8||5.006000| SvUVXx|5.004000||p SvUVX|5.004000||p SvUV_nomg|5.009001||p SvUV_set|5.009003||p SvUVx|5.004000||p SvUV|5.004000||p SvVOK||5.008001| SvVSTRING_mg|5.009004||p THIS|||n UNDERBAR|5.009002||p UTF8_MAXBYTES|5.009002||p UVSIZE|5.006000||p UVTYPE|5.006000||p UVXf|5.007001||p UVof|5.006000||p UVuf|5.006000||p UVxf|5.006000||p WARN_ALL|5.006000||p WARN_AMBIGUOUS|5.006000||p WARN_ASSERTIONS|5.011000||p WARN_BAREWORD|5.006000||p WARN_CLOSED|5.006000||p WARN_CLOSURE|5.006000||p WARN_DEBUGGING|5.006000||p WARN_DEPRECATED|5.006000||p WARN_DIGIT|5.006000||p WARN_EXEC|5.006000||p WARN_EXITING|5.006000||p WARN_GLOB|5.006000||p WARN_INPLACE|5.006000||p WARN_INTERNAL|5.006000||p WARN_IO|5.006000||p WARN_LAYER|5.008000||p WARN_MALLOC|5.006000||p WARN_MISC|5.006000||p WARN_NEWLINE|5.006000||p WARN_NUMERIC|5.006000||p WARN_ONCE|5.006000||p WARN_OVERFLOW|5.006000||p WARN_PACK|5.006000||p WARN_PARENTHESIS|5.006000||p WARN_PIPE|5.006000||p WARN_PORTABLE|5.006000||p WARN_PRECEDENCE|5.006000||p WARN_PRINTF|5.006000||p WARN_PROTOTYPE|5.006000||p WARN_QW|5.006000||p WARN_RECURSION|5.006000||p WARN_REDEFINE|5.006000||p WARN_REGEXP|5.006000||p WARN_RESERVED|5.006000||p WARN_SEMICOLON|5.006000||p WARN_SEVERE|5.006000||p WARN_SIGNAL|5.006000||p WARN_SUBSTR|5.006000||p WARN_SYNTAX|5.006000||p WARN_TAINT|5.006000||p WARN_THREADS|5.008000||p WARN_UNINITIALIZED|5.006000||p WARN_UNOPENED|5.006000||p WARN_UNPACK|5.006000||p WARN_UNTIE|5.006000||p WARN_UTF8|5.006000||p WARN_VOID|5.006000||p XCPT_CATCH|5.009002||p XCPT_RETHROW|5.009002||p XCPT_TRY_END|5.009002||p XCPT_TRY_START|5.009002||p XPUSHi||| XPUSHmortal|5.009002||p XPUSHn||| XPUSHp||| XPUSHs||| XPUSHu|5.004000||p XSPROTO|5.010000||p XSRETURN_EMPTY||| XSRETURN_IV||| XSRETURN_NO||| XSRETURN_NV||| XSRETURN_PV||| XSRETURN_UNDEF||| XSRETURN_UV|5.008001||p XSRETURN_YES||| XSRETURN|||p XST_mIV||| XST_mNO||| XST_mNV||| XST_mPV||| XST_mUNDEF||| XST_mUV|5.008001||p XST_mYES||| XS_VERSION_BOOTCHECK||| XS_VERSION||| XSprePUSH|5.006000||p XS||| ZeroD|5.009002||p Zero||| _aMY_CXT|5.007003||p _pMY_CXT|5.007003||p aMY_CXT_|5.007003||p aMY_CXT|5.007003||p aTHXR_|5.011000||p aTHXR|5.011000||p aTHX_|5.006000||p aTHX|5.006000||p add_data|||n addmad||| allocmy||| amagic_call||| amagic_cmp_locale||| amagic_cmp||| amagic_i_ncmp||| amagic_ncmp||| any_dup||| ao||| append_elem||| append_list||| append_madprops||| apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| av_clear||| av_create_and_push||5.009005| av_create_and_unshift_one||5.009005| av_delete||5.006000| av_exists||5.006000| av_extend||| av_fetch||| av_fill||| av_iter_p||5.011000| av_len||| av_make||| av_pop||| av_push||| av_reify||| av_shift||| av_store||| av_undef||| av_unshift||| ax|||n bad_type||| bind_match||| block_end||| block_gimme||5.004000| block_start||| boolSV|5.004000||p boot_core_PerlIO||| boot_core_UNIVERSAL||| boot_core_mro||| bytes_from_utf8||5.007001| bytes_to_uni|||n bytes_to_utf8||5.006001| call_argv|5.006000||p call_atexit||5.006000| call_list||5.004000| call_method|5.006000||p call_pv|5.006000||p call_sv|5.006000||p calloc||5.007002|n cando||| cast_i32||5.006000| cast_iv||5.006000| cast_ulong||5.006000| cast_uv||5.006000| check_type_and_open||| check_uni||| checkcomma||| checkposixcc||| ckWARN|5.006000||p ck_anoncode||| ck_bitop||| ck_concat||| ck_defined||| ck_delete||| ck_die||| ck_each||| ck_eof||| ck_eval||| ck_exec||| ck_exists||| ck_exit||| ck_ftst||| ck_fun||| ck_glob||| ck_grep||| ck_index||| ck_join||| ck_lfun||| ck_listiob||| ck_match||| ck_method||| ck_null||| ck_open||| ck_readline||| ck_repeat||| ck_require||| ck_return||| ck_rfun||| ck_rvconst||| ck_sassign||| ck_select||| ck_shift||| ck_sort||| ck_spair||| ck_split||| ck_subr||| ck_substr||| ck_svconst||| ck_trunc||| ck_unpack||| ckwarn_d||5.009003| ckwarn||5.009003| cl_and|||n cl_anything|||n cl_init_zero|||n cl_init|||n cl_is_anything|||n cl_or|||n clear_placeholders||| closest_cop||| convert||| cop_free||| cr_textfilter||| create_eval_scope||| croak_nocontext|||vn croak_xs_usage||5.011000| croak|||v csighandler||5.009003|n curmad||| custom_op_desc||5.007003| custom_op_name||5.007003| cv_ckproto_len||| cv_clone||| cv_const_sv||5.004000| cv_dump||| cv_undef||| cx_dump||5.005000| cx_dup||| cxinc||| dAXMARK|5.009003||p dAX|5.007002||p dITEMS|5.007002||p dMARK||| dMULTICALL||5.009003| dMY_CXT_SV|5.007003||p dMY_CXT|5.007003||p dNOOP|5.006000||p dORIGMARK||| dSP||| dTHR|5.004050||p dTHXR|5.011000||p dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p dUNDERBAR|5.009002||p dVAR|5.009003||p dXCPT|5.009002||p dXSARGS||| dXSI32||| dXSTARG|5.006000||p deb_curcv||| deb_nocontext|||vn deb_stack_all||| deb_stack_n||| debop||5.005000| debprofdump||5.005000| debprof||| debstackptrs||5.007003| debstack||5.007003| debug_start_match||| deb||5.007003|v del_sv||| delete_eval_scope||| delimcpy||5.004000| deprecate_old||| deprecate||| despatch_signals||5.007001| destroy_matcher||| die_nocontext|||vn die_where||| die|||v dirp_dup||| div128||| djSP||| do_aexec5||| do_aexec||| do_aspawn||| do_binmode||5.004050| do_chomp||| do_chop||| do_close||| do_dump_pad||| do_eof||| do_exec3||| do_execfree||| do_exec||| do_gv_dump||5.006000| do_gvgv_dump||5.006000| do_hv_dump||5.006000| do_ipcctl||| do_ipcget||| do_join||| do_kv||| do_magic_dump||5.006000| do_msgrcv||| do_msgsnd||| do_oddball||| do_op_dump||5.006000| do_op_xmldump||| do_open9||5.006000| do_openn||5.007001| do_open||5.004000| do_pmop_dump||5.006000| do_pmop_xmldump||| do_print||| do_readline||| do_seek||| do_semop||| do_shmio||| do_smartmatch||| do_spawn_nowait||| do_spawn||| do_sprintf||| do_sv_dump||5.006000| do_sysseek||| do_tell||| do_trans_complex_utf8||| do_trans_complex||| do_trans_count_utf8||| do_trans_count||| do_trans_simple_utf8||| do_trans_simple||| do_trans||| do_vecget||| do_vecset||| do_vop||| docatch||| doeval||| dofile||| dofindlabel||| doform||| doing_taint||5.008001|n dooneliner||| doopen_pm||| doparseform||| dopoptoeval||| dopoptogiven||| dopoptolabel||| dopoptoloop||| dopoptosub_at||| dopoptowhen||| doref||5.009003| dounwind||| dowantarray||| dump_all||5.006000| dump_eval||5.006000| dump_exec_pos||| dump_fds||| dump_form||5.006000| dump_indent||5.006000|v dump_mstats||| dump_packsubs||5.006000| dump_sub||5.006000| dump_sv_child||| dump_trie_interim_list||| dump_trie_interim_table||| dump_trie||| dump_vindent||5.006000| dumpuntil||| dup_attrlist||| emulate_cop_io||| eval_pv|5.006000||p eval_sv|5.006000||p exec_failed||| expect_number||| fbm_compile||5.005000| fbm_instr||5.005000| feature_is_enabled||| fetch_cop_label||5.011000| filter_add||| filter_del||| filter_gets||| filter_read||| find_and_forget_pmops||| find_array_subscript||| find_beginning||| find_byclass||| find_hash_subscript||| find_in_my_stash||| find_runcv||5.008001| find_rundefsvoffset||5.009002| find_script||| find_uninit_var||| first_symbol|||n fold_constants||| forbid_setid||| force_ident||| force_list||| force_next||| force_version||| force_word||| forget_pmop||| form_nocontext|||vn form||5.004000|v fp_dup||| fprintf_nocontext|||vn free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| get_arena||| get_aux_mg||| get_av|5.006000||p get_context||5.006000|n get_cvn_flags||5.009005| get_cv|5.006000||p get_db_sub||| get_debug_opts||| get_hash_seed||| get_hv|5.006000||p get_isa_hash||| get_mstats||| get_no_modify||| get_num||| get_op_descs||5.005000| get_op_names||5.005000| get_opargs||| get_ppaddr||5.006000| get_re_arg||| get_sv|5.006000||p get_vtbl||5.005030| getcwd_sv||5.007002| getenv_len||| glob_2number||| glob_assign_glob||| glob_assign_ref||| gp_dup||| gp_free||| gp_ref||| grok_bin|5.007003||p grok_hex|5.007003||p grok_number|5.007002||p grok_numeric_radix|5.007002||p grok_oct|5.007003||p group_end||| gv_AVadd||| gv_HVadd||| gv_IOadd||| gv_SVadd||| gv_autoload4||5.004000| gv_check||| gv_const_sv||5.009003| gv_dump||5.006000| gv_efullname3||5.004000| gv_efullname4||5.006001| gv_efullname||| gv_ename||| gv_fetchfile_flags||5.009005| gv_fetchfile||| gv_fetchmeth_autoload||5.007003| gv_fetchmethod_autoload||5.004000| gv_fetchmethod_flags||5.011000| gv_fetchmethod||| gv_fetchmeth||| gv_fetchpvn_flags|5.009002||p gv_fetchpvs|5.009004||p gv_fetchpv||| gv_fetchsv||5.009002| gv_fullname3||5.004000| gv_fullname4||5.006001| gv_fullname||| gv_get_super_pkg||| gv_handler||5.007001| gv_init_sv||| gv_init||| gv_name_set||5.009004| gv_stashpvn|5.004000||p gv_stashpvs|5.009003||p gv_stashpv||| gv_stashsv||| he_dup||| hek_dup||| hfreeentries||| hsplit||| hv_assert||5.011000| hv_auxinit|||n hv_backreferences_p||| hv_clear_placeholders||5.009001| hv_clear||| hv_common_key_len||5.010000| hv_common||5.010000| hv_copy_hints_hv||| hv_delayfree_ent||5.004000| hv_delete_common||| hv_delete_ent||5.004000| hv_delete||| hv_eiter_p||5.009003| hv_eiter_set||5.009003| hv_exists_ent||5.004000| hv_exists||| hv_fetch_ent||5.004000| hv_fetchs|5.009003||p hv_fetch||| hv_free_ent||5.004000| hv_iterinit||| hv_iterkeysv||5.004000| hv_iterkey||| hv_iternext_flags||5.008000| hv_iternextsv||| hv_iternext||| hv_iterval||| hv_kill_backrefs||| hv_ksplit||5.004000| hv_magic_check|||n hv_magic||| hv_name_set||5.009003| hv_notallowed||| hv_placeholders_get||5.009003| hv_placeholders_p||5.009003| hv_placeholders_set||5.009003| hv_riter_p||5.009003| hv_riter_set||5.009003| hv_scalar||5.009001| hv_store_ent||5.004000| hv_store_flags||5.008000| hv_stores|5.009004||p hv_store||| hv_undef||| ibcmp_locale||5.004000| ibcmp_utf8||5.007003| ibcmp||| incline||| incpush_if_exists||| incpush_use_sep||| incpush||| ingroup||| init_argv_symbols||| init_debugger||| init_global_struct||| init_i18nl10n||5.006000| init_i18nl14n||5.006000| init_ids||| init_interp||| init_main_stash||| init_perllib||| init_postdump_symbols||| init_predump_symbols||| init_stacks||5.005000| init_tm||5.007002| instr||| intro_my||| intuit_method||| intuit_more||| invert||| io_close||| isALNUMC|5.006000||p isALNUM||| isALPHA||| isASCII|5.006000||p isBLANK|5.006001||p isCNTRL|5.006000||p isDIGIT||| isGRAPH|5.006000||p isGV_with_GP|5.009004||p isLOWER||| isPRINT|5.004000||p isPSXSPC|5.006001||p isPUNCT|5.006000||p isSPACE||| isUPPER||| isXDIGIT|5.006000||p is_an_int||| is_gv_magical_sv||| is_handle_constructor|||n is_list_assignment||| is_lvalue_sub||5.007001| is_uni_alnum_lc||5.006000| is_uni_alnumc_lc||5.006000| is_uni_alnumc||5.006000| is_uni_alnum||5.006000| is_uni_alpha_lc||5.006000| is_uni_alpha||5.006000| is_uni_ascii_lc||5.006000| is_uni_ascii||5.006000| is_uni_cntrl_lc||5.006000| is_uni_cntrl||5.006000| is_uni_digit_lc||5.006000| is_uni_digit||5.006000| is_uni_graph_lc||5.006000| is_uni_graph||5.006000| is_uni_idfirst_lc||5.006000| is_uni_idfirst||5.006000| is_uni_lower_lc||5.006000| is_uni_lower||5.006000| is_uni_print_lc||5.006000| is_uni_print||5.006000| is_uni_punct_lc||5.006000| is_uni_punct||5.006000| is_uni_space_lc||5.006000| is_uni_space||5.006000| is_uni_upper_lc||5.006000| is_uni_upper||5.006000| is_uni_xdigit_lc||5.006000| is_uni_xdigit||5.006000| is_utf8_alnumc||5.006000| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| is_utf8_char_slow|||n is_utf8_char||5.006000| is_utf8_cntrl||5.006000| is_utf8_common||| is_utf8_digit||5.006000| is_utf8_graph||5.006000| is_utf8_idcont||5.008000| is_utf8_idfirst||5.006000| is_utf8_lower||5.006000| is_utf8_mark||5.006000| is_utf8_print||5.006000| is_utf8_punct||5.006000| is_utf8_space||5.006000| is_utf8_string_loclen||5.009003| is_utf8_string_loc||5.008001| is_utf8_string||5.006001| is_utf8_upper||5.006000| is_utf8_xdigit||5.006000| isa_lookup||| items|||n ix|||n jmaybe||| join_exact||| keyword||| leave_scope||| lex_end||| lex_start||| linklist||| listkids||| list||| load_module_nocontext|||vn load_module|5.006000||pv localize||| looks_like_bool||| looks_like_number||| lop||| mPUSHi|5.009002||p mPUSHn|5.009002||p mPUSHp|5.009002||p mPUSHs|5.011000||p mPUSHu|5.009002||p mXPUSHi|5.009002||p mXPUSHn|5.009002||p mXPUSHp|5.009002||p mXPUSHs|5.011000||p mXPUSHu|5.009002||p mad_free||| madlex||| madparse||| magic_clear_all_env||| magic_clearenv||| magic_clearhint||| magic_clearisa||| magic_clearpack||| magic_clearsig||| magic_dump||5.006000| magic_existspack||| magic_freearylen_p||| magic_freeovrld||| magic_getarylen||| magic_getdefelem||| magic_getnkeys||| magic_getpack||| magic_getpos||| magic_getsig||| magic_getsubstr||| magic_gettaint||| magic_getuvar||| magic_getvec||| magic_get||| magic_killbackrefs||| magic_len||| magic_methcall||| magic_methpack||| magic_nextpack||| magic_regdata_cnt||| magic_regdatum_get||| magic_regdatum_set||| magic_scalarpack||| magic_set_all_env||| magic_setamagic||| magic_setarylen||| magic_setcollxfrm||| magic_setdbline||| magic_setdefelem||| magic_setenv||| magic_sethint||| magic_setisa||| magic_setmglob||| magic_setnkeys||| magic_setpack||| magic_setpos||| magic_setregexp||| magic_setsig||| magic_setsubstr||| magic_settaint||| magic_setutf8||| magic_setuvar||| magic_setvec||| magic_set||| magic_sizepack||| magic_wipepack||| make_matcher||| make_trie_failtable||| make_trie||| malloc_good_size|||n malloced_size|||n malloc||5.007002|n markstack_grow||| matcher_matches_sv||| measure_struct||| memEQ|5.004000||p memNE|5.004000||p mem_collxfrm||| mem_log_common|||n mess_alloc||| mess_nocontext|||vn mess||5.006000|v method_common||| mfree||5.007002|n mg_clear||| mg_copy||| mg_dup||| mg_find||| mg_free||| mg_get||| mg_length||5.005000| mg_localize||| mg_magical||| mg_set||| mg_size||5.005000| mini_mktime||5.007002| missingterm||| mode_from_discipline||| modkids||| mod||| more_bodies||| more_sv||| moreswitches||| mro_get_from_name||5.011000| mro_get_linear_isa_dfs||| mro_get_linear_isa||5.009005| mro_get_private_data||5.011000| mro_isa_changed_in||| mro_meta_dup||| mro_meta_init||| mro_method_changed_in||5.009005| mro_register||5.011000| mro_set_mro||5.011000| mro_set_private_data||5.011000| mul128||| mulexp10|||n my_atof2||5.007002| my_atof||5.006000| my_attrs||| my_bcopy|||n my_betoh16|||n my_betoh32|||n my_betoh64|||n my_betohi|||n my_betohl|||n my_betohs|||n my_bzero|||n my_chsize||| my_clearenv||| my_cxt_index||| my_cxt_init||| my_dirfd||5.009005| my_exit_jump||| my_exit||| my_failure_exit||5.004000| my_fflush_all||5.006000| my_fork||5.007003|n my_htobe16|||n my_htobe32|||n my_htobe64|||n my_htobei|||n my_htobel|||n my_htobes|||n my_htole16|||n my_htole32|||n my_htole64|||n my_htolei|||n my_htolel|||n my_htoles|||n my_htonl||| my_kid||| my_letoh16|||n my_letoh32|||n my_letoh64|||n my_letohi|||n my_letohl|||n my_letohs|||n my_lstat||| my_memcmp||5.004000|n my_memset|||n my_ntohl||| my_pclose||5.004000| my_popen_list||5.007001| my_popen||5.004000| my_setenv||| my_snprintf|5.009004||pvn my_socketpair||5.007003|n my_sprintf|5.009003||pvn my_stat||| my_strftime||5.007002| my_strlcat|5.009004||pn my_strlcpy|5.009004||pn my_swabn|||n my_swap||| my_unexec||| my_vsnprintf||5.009004|n need_utf8|||n newANONATTRSUB||5.006000| newANONHASH||| newANONLIST||| newANONSUB||| newASSIGNOP||| newATTRSUB||5.006000| newAVREF||| newAV||| newBINOP||| newCONDOP||| newCONSTSUB|5.004050||p newCVREF||| newDEFSVOP||| newFORM||| newFOROP||| newGIVENOP||5.009003| newGIVWHENOP||| newGP||| newGVOP||| newGVREF||| newGVgen||| newHVREF||| newHVhv||5.005000| newHV||| newIO||| newLISTOP||| newLOGOP||| newLOOPEX||| newLOOPOP||| newMADPROP||| newMADsv||| newMYSUB||| newNULLLIST||| newOP||| newPADOP||| newPMOP||| newPROG||| newPVOP||| newRANGE||| newRV_inc|5.004000||p newRV_noinc|5.004000||p newRV||| newSLICEOP||| newSTATEOP||| newSUB||| newSVOP||| newSVREF||| newSV_type|5.009005||p newSVhek||5.009003| newSViv||| newSVnv||| newSVpvf_nocontext|||vn newSVpvf||5.004000|v newSVpvn_flags|5.011000||p newSVpvn_share|5.007001||p newSVpvn_utf8|5.011000||p newSVpvn|5.004050||p newSVpvs_flags|5.011000||p newSVpvs_share||5.009003| newSVpvs|5.009003||p newSVpv||| newSVrv||| newSVsv||| newSVuv|5.006000||p newSV||| newTOKEN||| newUNOP||| newWHENOP||5.009003| newWHILEOP||5.009003| newXS_flags||5.009004| newXSproto||5.006000| newXS||5.006000| new_collate||5.006000| new_constant||| new_ctype||5.006000| new_he||| new_logop||| new_numeric||5.006000| new_stackinfo||5.005000| new_version||5.009000| new_warnings_bitfield||| next_symbol||| nextargv||| nextchar||| ninstr||| no_bareword_allowed||| no_fh_allowed||| no_op||| not_a_number||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n offer_nice_chunk||| oopsAV||| oopsHV||| op_clear||| op_const_sv||| op_dump||5.006000| op_free||| op_getmad_weak||| op_getmad||| op_null||5.007002| op_refcnt_dec||| op_refcnt_inc||| op_refcnt_lock||5.009002| op_refcnt_unlock||5.009002| op_xmldump||| open_script||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p pTHX_|5.006000||p pTHX|5.006000||p packWARN|5.007003||p pack_cat||5.007003| pack_rec||| package||| packlist||5.008001| pad_add_anon||| pad_add_name||| pad_alloc||| pad_block_start||| pad_check_dup||| pad_compname_type||| pad_findlex||| pad_findmy||| pad_fixup_inner_anons||| pad_free||| pad_leavemy||| pad_new||| pad_peg|||n pad_push||| pad_reset||| pad_setsv||| pad_sv||5.011000| pad_swipe||| pad_tidy||| pad_undef||| parse_body||| parse_unicode_opts||| parser_dup||| parser_free||| path_is_absolute|||n peep||| pending_Slabs_to_ro||| perl_alloc_using|||n perl_alloc|||n perl_clone_using|||n perl_clone|||n perl_construct|||n perl_destruct||5.007003|n perl_free|||n perl_parse||5.006000|n perl_run|||n pidgone||| pm_description||| pmflag||| pmop_dump||5.006000| pmop_xmldump||| pmruntime||| pmtrans||| pop_scope||| pregcomp||5.009005| pregexec||| pregfree2||5.011000| pregfree||| prepend_elem||| prepend_madprops||| printbuf||| printf_nocontext|||vn process_special_blocks||| ptr_table_clear||5.009005| ptr_table_fetch||5.009005| ptr_table_find|||n ptr_table_free||5.009005| ptr_table_new||5.009005| ptr_table_split||5.009005| ptr_table_store||5.009005| push_scope||| put_byte||| pv_display|5.006000||p pv_escape|5.009004||p pv_pretty|5.009004||p pv_uni_display||5.007003| qerror||| qsortsvu||| re_compile||5.009005| re_croak2||| re_dup_guts||| re_intuit_start||5.009005| re_intuit_string||5.006000| readpipe_override||| realloc||5.007002|n reentrant_free||| reentrant_init||| reentrant_retry|||vn reentrant_size||| ref_array_or_hash||| refcounted_he_chain_2hv||| refcounted_he_fetch||| refcounted_he_free||| refcounted_he_new_common||| refcounted_he_new||| refcounted_he_value||| refkids||| refto||| ref||5.011000| reg_check_named_buff_matched||| reg_named_buff_all||5.009005| reg_named_buff_exists||5.009005| reg_named_buff_fetch||5.009005| reg_named_buff_firstkey||5.009005| reg_named_buff_iter||| reg_named_buff_nextkey||5.009005| reg_named_buff_scalar||5.009005| reg_named_buff||| reg_namedseq||| reg_node||| reg_numbered_buff_fetch||| reg_numbered_buff_length||| reg_numbered_buff_store||| reg_qr_package||| reg_recode||| reg_scan_name||| reg_skipcomment||| reg_temp_copy||| reganode||| regatom||| regbranch||| regclass_swash||5.009004| regclass||| regcppop||| regcppush||| regcurly|||n regdump_extflags||| regdump||5.005000| regdupe_internal||| regexec_flags||5.005000| regfree_internal||5.009005| reghop3|||n reghop4|||n reghopmaybe3|||n reginclass||| reginitcolors||5.006000| reginsert||| regmatch||| regnext||5.005000| regpiece||| regpposixcc||| regprop||| regrepeat||| regtail_study||| regtail||| regtry||| reguni||| regwhite|||n reg||| repeatcpy||| report_evil_fh||| report_uninit||| require_pv||5.006000| require_tie_mod||| restore_magic||| rninstr||| rsignal_restore||| rsignal_save||| rsignal_state||5.004000| rsignal||5.004000| run_body||| run_user_filter||| runops_debug||5.005000| runops_standard||5.005000| rvpv_dup||| rxres_free||| rxres_restore||| rxres_save||| safesyscalloc||5.006000|n safesysfree||5.006000|n safesysmalloc||5.006000|n safesysrealloc||5.006000|n same_dirent||| save_I16||5.004000| save_I32||| save_I8||5.006000| save_adelete||5.011000| save_aelem||5.004050| save_alloc||5.006000| save_aptr||| save_ary||| save_bool||5.008001| save_clearsv||| save_delete||| save_destructor_x||5.006000| save_destructor||5.006000| save_freeop||| save_freepv||| save_freesv||| save_generic_pvref||5.006001| save_generic_svref||5.005030| save_gp||5.004000| save_hash||| save_hek_flags|||n save_helem_flags||5.011000| save_helem||5.004050| save_hints||| save_hptr||| save_int||| save_item||| save_iv||5.005000| save_lines||| save_list||| save_long||| save_magic||| save_mortalizesv||5.007001| save_nogv||| save_op||| save_padsv_and_mortalize||5.011000| save_pptr||| save_pushi32ptr||| save_pushptri32ptr||| save_pushptrptr||| save_pushptr||5.011000| save_re_context||5.006000| save_scalar_at||| save_scalar||| save_set_svflags||5.009000| save_shared_pvref||5.007003| save_sptr||| save_svref||| save_vptr||5.006000| savepvn||| savepvs||5.009003| savepv||| savesharedpvn||5.009005| savesharedpv||5.007003| savestack_grow_cnt||5.008001| savestack_grow||| savesvpv||5.009002| sawparens||| scalar_mod_type|||n scalarboolean||| scalarkids||| scalarseq||| scalarvoid||| scalar||| scan_bin||5.006000| scan_commit||| scan_const||| scan_formline||| scan_heredoc||| scan_hex||| scan_ident||| scan_inputsymbol||| scan_num||5.007001| scan_oct||| scan_pat||| scan_str||| scan_subst||| scan_trans||| scan_version||5.009001| scan_vstring||5.009005| scan_word||| scope||| screaminstr||5.005000| search_const||| seed||5.008001| sequence_num||| sequence_tail||| sequence||| set_context||5.006000|n set_numeric_local||5.006000| set_numeric_radix||5.006000| set_numeric_standard||5.006000| setdefout||| share_hek_flags||| share_hek||5.004000| si_dup||| sighandler|||n simplify_sort||| skipspace0||| skipspace1||| skipspace2||| skipspace||| softref2xv||| sortcv_stacked||| sortcv_xsub||| sortcv||| sortsv_flags||5.009003| sortsv||5.007003| space_join_names_mortal||| ss_dup||| stack_grow||| start_force||| start_glob||| start_subparse||5.004000| stashpv_hvname_match||5.011000| stdize_locale||| store_cop_label||| strEQ||| strGE||| strGT||| strLE||| strLT||| strNE||| str_to_version||5.006000| strip_return||| strnEQ||| strnNE||| study_chunk||| sub_crush_depth||| sublex_done||| sublex_push||| sublex_start||| sv_2bool||| sv_2cv||| sv_2io||| sv_2iuv_common||| sv_2iuv_non_preserve||| sv_2iv_flags||5.009001| sv_2iv||| sv_2mortal||| sv_2num||| sv_2nv||| sv_2pv_flags|5.007002||p sv_2pv_nolen|5.006000||p sv_2pvbyte_nolen|5.006000||p sv_2pvbyte|5.006000||p sv_2pvutf8_nolen||5.006000| sv_2pvutf8||5.006000| sv_2pv||| sv_2uv_flags||5.009001| sv_2uv|5.004000||p sv_add_arena||| sv_add_backref||| sv_backoff||| sv_bless||| sv_cat_decode||5.008001| sv_catpv_mg|5.004050||p sv_catpvf_mg_nocontext|||pvn sv_catpvf_mg|5.006000|5.004000|pv sv_catpvf_nocontext|||vn sv_catpvf||5.004000|v sv_catpvn_flags||5.007002| sv_catpvn_mg|5.004050||p sv_catpvn_nomg|5.007002||p sv_catpvn||| sv_catpvs|5.009003||p sv_catpv||| sv_catsv_flags||5.007002| sv_catsv_mg|5.004050||p sv_catsv_nomg|5.007002||p sv_catsv||| sv_catxmlpvn||| sv_catxmlsv||| sv_chop||| sv_clean_all||| sv_clean_objs||| sv_clear||| sv_cmp_locale||5.004000| sv_cmp||| sv_collxfrm||| sv_compile_2op||5.008001| sv_copypv||5.007003| sv_dec||| sv_del_backref||| sv_derived_from||5.004000| sv_destroyable||5.010000| sv_does||5.009004| sv_dump||| sv_dup_inc_multiple||| sv_dup||| sv_eq||| sv_exp_grow||| sv_force_normal_flags||5.007001| sv_force_normal||5.006000| sv_free2||| sv_free_arenas||| sv_free||| sv_gets||5.004000| sv_grow||| sv_i_ncmp||| sv_inc||| sv_insert_flags||5.011000| sv_insert||| sv_isa||| sv_isobject||| sv_iv||5.005000| sv_kill_backrefs||| sv_len_utf8||5.006000| sv_len||| sv_magic_portable|5.011000|5.004000|p sv_magicext||5.007003| sv_magic||| sv_mortalcopy||| sv_ncmp||| sv_newmortal||| sv_newref||| sv_nolocking||5.007003| sv_nosharing||5.007003| sv_nounlocking||| sv_nv||5.005000| sv_peek||5.005000| sv_pos_b2u_midway||| sv_pos_b2u||5.006000| sv_pos_u2b_cached||| sv_pos_u2b_forwards|||n sv_pos_u2b_midway|||n sv_pos_u2b||5.006000| sv_pvbyten_force||5.006000| sv_pvbyten||5.006000| sv_pvbyte||5.006000| sv_pvn_force_flags|5.007002||p sv_pvn_force||| sv_pvn_nomg|5.007003|5.005000|p sv_pvn||5.005000| sv_pvutf8n_force||5.006000| sv_pvutf8n||5.006000| sv_pvutf8||5.006000| sv_pv||5.006000| sv_recode_to_utf8||5.007003| sv_reftype||| sv_release_COW||| sv_replace||| sv_report_used||| sv_reset||| sv_rvweaken||5.006000| sv_setiv_mg|5.004050||p sv_setiv||| sv_setnv_mg|5.006000||p sv_setnv||| sv_setpv_mg|5.004050||p sv_setpvf_mg_nocontext|||pvn sv_setpvf_mg|5.006000|5.004000|pv sv_setpvf_nocontext|||vn sv_setpvf||5.004000|v sv_setpviv_mg||5.008001| sv_setpviv||5.008001| sv_setpvn_mg|5.004050||p sv_setpvn||| sv_setpvs|5.009004||p sv_setpv||| sv_setref_iv||| sv_setref_nv||| sv_setref_pvn||| sv_setref_pv||| sv_setref_uv||5.007001| sv_setsv_cow||| sv_setsv_flags||5.007002| sv_setsv_mg|5.004050||p sv_setsv_nomg|5.007002||p sv_setsv||| sv_setuv_mg|5.004050||p sv_setuv|5.004000||p sv_tainted||5.004000| sv_taint||5.004000| sv_true||5.005000| sv_unglob||| sv_uni_display||5.007003| sv_unmagic||| sv_unref_flags||5.007001| sv_unref||| sv_untaint||5.004000| sv_upgrade||| sv_usepvn_flags||5.009004| sv_usepvn_mg|5.004050||p sv_usepvn||| sv_utf8_decode||5.006000| sv_utf8_downgrade||5.006000| sv_utf8_encode||5.006000| sv_utf8_upgrade_flags_grow||5.011000| sv_utf8_upgrade_flags||5.007002| sv_utf8_upgrade_nomg||5.007002| sv_utf8_upgrade||5.007001| sv_uv|5.005000||p sv_vcatpvf_mg|5.006000|5.004000|p sv_vcatpvfn||5.004000| sv_vcatpvf|5.006000|5.004000|p sv_vsetpvf_mg|5.006000|5.004000|p sv_vsetpvfn||5.004000| sv_vsetpvf|5.006000|5.004000|p sv_xmlpeek||| svtype||| swallow_bom||| swap_match_buff||| swash_fetch||5.007002| swash_get||| swash_init||5.006000| sys_init3||5.010000|n sys_init||5.010000|n sys_intern_clear||| sys_intern_dup||| sys_intern_init||| sys_term||5.010000|n taint_env||| taint_proper||| tmps_grow||5.006000| toLOWER||| toUPPER||| to_byte_substr||| to_uni_fold||5.007003| to_uni_lower_lc||5.006000| to_uni_lower||5.007003| to_uni_title_lc||5.006000| to_uni_title||5.007003| to_uni_upper_lc||5.006000| to_uni_upper||5.007003| to_utf8_case||5.007003| to_utf8_fold||5.007003| to_utf8_lower||5.007003| to_utf8_substr||| to_utf8_title||5.007003| to_utf8_upper||5.007003| token_free||| token_getmad||| tokenize_use||| tokeq||| tokereport||| too_few_arguments||| too_many_arguments||| uiv_2buf|||n unlnk||| unpack_rec||| unpack_str||5.007003| unpackstring||5.008001| unshare_hek_or_pvn||| unshare_hek||| unsharepvn||5.004000| unwind_handler_stack||| update_debugger_info||| upg_version||5.009005| usage||| utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| utf8_distance||5.006000| utf8_hop||5.006000| utf8_length||5.007001| utf8_mg_pos_cache_update||| utf8_to_bytes||5.006001| utf8_to_uvchr||5.007001| utf8_to_uvuni||5.007001| utf8n_to_uvchr||| utf8n_to_uvuni||5.007001| utilize||| uvchr_to_utf8_flags||5.007003| uvchr_to_utf8||| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| validate_suid||| varname||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| vdie_common||| vdie_croak_common||| vdie||| vform||5.006000| visit||| vivify_defelem||| vivify_ref||| vload_module|5.006000||p vmess||5.006000| vnewSVpvf|5.006000|5.004000|p vnormal||5.009002| vnumify||5.009000| vstringify||5.009000| vverify||5.009003| vwarner||5.006000| vwarn||5.006000| wait4pid||| warn_nocontext|||vn warner_nocontext|||vn warner|5.006000|5.004000|pv warn|||v watch||| whichsig||| write_no_mem||| write_to_stderr||| xmldump_all||| xmldump_attr||| xmldump_eval||| xmldump_form||| xmldump_indent|||v xmldump_packsubs||| xmldump_sub||| xmldump_vindent||| yyerror||| yylex||| yyparse||| yywarn||| ); if (exists $opt{'list-unsupported'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{todo}; print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; } exit 0; } # Scan for possible replacement candidates my(%replace, %need, %hints, %warnings, %depends); my $replace = 0; my($hint, $define, $function); sub find_api { my $code = shift; $code =~ s{ / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) | "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx; grep { exists $API{$_} } $code =~ /(\w+)/mg; } while () { if ($hint) { my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings; if (m{^\s*\*\s(.*?)\s*$}) { for (@{$hint->[1]}) { $h->{$_} ||= ''; # suppress warning with older perls $h->{$_} .= "$1\n"; } } else { undef $hint } } $hint = [$1, [split /,?\s+/, $2]] if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}; if ($define) { if ($define->[1] =~ /\\$/) { $define->[1] .= $_; } else { if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) { my @n = find_api($define->[1]); push @{$depends{$define->[0]}}, @n if @n } undef $define; } } $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)}; if ($function) { if (/^}/) { if (exists $API{$function->[0]}) { my @n = find_api($function->[1]); push @{$depends{$function->[0]}}, @n if @n } undef $function; } else { $function->[1] .= $_; } } $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)}; $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { my @deps = map { s/\s+//g; $_ } split /,/, $3; my $d; for $d (map { s/\s+//g; $_ } split /,/, $1) { push @{$depends{$d}}, @deps; } } $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; } for (values %depends) { my %s; $_ = [sort grep !$s{$_}++, @$_]; } if (exists $opt{'api-info'}) { my $f; my $count = 0; my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $f =~ /$match/; print "\n=== $f ===\n\n"; my $info = 0; if ($API{$f}{base} || $API{$f}{todo}) { my $base = format_version($API{$f}{base} || $API{$f}{todo}); print "Supported at least starting from perl-$base.\n"; $info++; } if ($API{$f}{provided}) { my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; print "Support by $ppport provided back to perl-$todo.\n"; print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; print "\n$hints{$f}" if exists $hints{$f}; print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f}; $info++; } print "No portability information available.\n" unless $info; $count++; } $count or print "Found no API matching '$opt{'api-info'}'."; print "\n"; exit 0; } if (exists $opt{'list-provided'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{provided}; my @flags; push @flags, 'explicit' if exists $need{$f}; push @flags, 'depend' if exists $depends{$f}; push @flags, 'hint' if exists $hints{$f}; push @flags, 'warning' if exists $warnings{$f}; my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; print "$f$flags\n"; } exit 0; } my @files; my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc ); my $srcext = join '|', map { quotemeta $_ } @srcext; if (@ARGV) { my %seen; for (@ARGV) { if (-e) { if (-f) { push @files, $_ unless $seen{$_}++; } else { warn "'$_' is not a file.\n" } } else { my @new = grep { -f } glob $_ or warn "'$_' does not exist.\n"; push @files, grep { !$seen{$_}++ } @new; } } } else { eval { require File::Find; File::Find::find(sub { $File::Find::name =~ /($srcext)$/i and push @files, $File::Find::name; }, '.'); }; if ($@) { @files = map { glob "*$_" } @srcext; } } if (!@ARGV || $opt{filter}) { my(@in, @out); my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; for (@files) { my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i; push @{ $out ? \@out : \@in }, $_; } if (@ARGV && @out) { warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); } @files = @in; } die "No input files given!\n" unless @files; my(%files, %global, %revreplace); %revreplace = reverse %replace; my $filename; my $patch_opened = 0; for $filename (@files) { unless (open IN, "<$filename") { warn "Unable to read from $filename: $!\n"; next; } info("Scanning $filename ..."); my $c = do { local $/; }; close IN; my %file = (orig => $c, changes => 0); # Temporarily remove C/XS comments and strings from the code my @ccom; $c =~ s{ ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]* | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* ) | ( ^$HS*\#[^\r\n]* | "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) ) }{ defined $2 and push @ccom, $2; defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex; $file{ccom} = \@ccom; $file{code} = $c; $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m; my $func; for $func (keys %API) { my $match = $func; $match .= "|$revreplace{$func}" if exists $revreplace{$func}; if ($c =~ /\b(?:Perl_)?($match)\b/) { $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; if (exists $API{$func}{provided}) { $file{uses_provided}{$func}++; if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { $file{uses}{$func}++; my @deps = rec_depend($func); if (@deps) { $file{uses_deps}{$func} = \@deps; for (@deps) { $file{uses}{$_} = 0 unless exists $file{uses}{$_}; } } for ($func, @deps) { $file{needs}{$_} = 'static' if exists $need{$_}; } } } if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { if ($c =~ /\b$func\b/) { $file{uses_todo}{$func}++; } } } } while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { if (exists $need{$2}) { $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; } else { warning("Possibly wrong #define $1 in $filename") } } for (qw(uses needs uses_todo needed_global needed_static)) { for $func (keys %{$file{$_}}) { push @{$global{$_}{$func}}, $filename; } } $files{$filename} = \%file; } # Globally resolve NEED_'s my $need; for $need (keys %{$global{needs}}) { if (@{$global{needs}{$need}} > 1) { my @targets = @{$global{needs}{$need}}; my @t = grep $files{$_}{needed_global}{$need}, @targets; @targets = @t if @t; @t = grep /\.xs$/i, @targets; @targets = @t if @t; my $target = shift @targets; $files{$target}{needs}{$need} = 'global'; for (@{$global{needs}{$need}}) { $files{$_}{needs}{$need} = 'extern' if $_ ne $target; } } } for $filename (@files) { exists $files{$filename} or next; info("=== Analyzing $filename ==="); my %file = %{$files{$filename}}; my $func; my $c = $file{code}; my $warnings = 0; for $func (sort keys %{$file{uses_Perl}}) { if ($API{$func}{varargs}) { unless ($API{$func}{nothxarg}) { my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); if ($changes) { warning("Doesn't pass interpreter argument aTHX to Perl_$func"); $file{changes} += $changes; } } } else { warning("Uses Perl_$func instead of $func"); $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} {$func$1(}g); } } for $func (sort keys %{$file{uses_replace}}) { warning("Uses $func instead of $replace{$func}"); $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); } for $func (sort keys %{$file{uses_provided}}) { if ($file{uses}{$func}) { if (exists $file{uses_deps}{$func}) { diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); } else { diag("Uses $func"); } } $warnings += hint($func); } unless ($opt{quiet}) { for $func (sort keys %{$file{uses_todo}}) { print "*** WARNING: Uses $func, which may not be portable below perl ", format_version($API{$func}{todo}), ", even with '$ppport'\n"; $warnings++; } } for $func (sort keys %{$file{needed_static}}) { my $message = ''; if (not exists $file{uses}{$func}) { $message = "No need to define NEED_$func if $func is never used"; } elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { $message = "No need to define NEED_$func when already needed globally"; } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); } } for $func (sort keys %{$file{needed_global}}) { my $message = ''; if (not exists $global{uses}{$func}) { $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; } elsif (exists $file{needs}{$func}) { if ($file{needs}{$func} eq 'extern') { $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; } elsif ($file{needs}{$func} eq 'static') { $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; } } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); } } $file{needs_inc_ppport} = keys %{$file{uses}}; if ($file{needs_inc_ppport}) { my $pp = ''; for $func (sort keys %{$file{needs}}) { my $type = $file{needs}{$func}; next if $type eq 'extern'; my $suffix = $type eq 'global' ? '_GLOBAL' : ''; unless (exists $file{"needed_$type"}{$func}) { if ($type eq 'global') { diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); } else { diag("File needs $func, adding static request"); } $pp .= "#define NEED_$func$suffix\n"; } } if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { $pp = ''; $file{changes}++; } unless ($file{has_inc_ppport}) { diag("Needs to include '$ppport'"); $pp .= qq(#include "$ppport"\n) } if ($pp) { $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) || ($c =~ s/^/$pp/); } } else { if ($file{has_inc_ppport}) { diag("No need to include '$ppport'"); $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); } } # put back in our C comments my $ix; my $cppc = 0; my @ccom = @{$file{ccom}}; for $ix (0 .. $#ccom) { if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { $cppc++; $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; } else { $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; } } if ($cppc) { my $s = $cppc != 1 ? 's' : ''; warning("Uses $cppc C++ style comment$s, which is not portable"); } my $s = $warnings != 1 ? 's' : ''; my $warn = $warnings ? " ($warnings warning$s)" : ''; info("Analysis completed$warn"); if ($file{changes}) { if (exists $opt{copy}) { my $newfile = "$filename$opt{copy}"; if (-e $newfile) { error("'$newfile' already exists, refusing to write copy of '$filename'"); } else { local *F; if (open F, ">$newfile") { info("Writing copy of '$filename' with changes to '$newfile'"); print F $c; close F; } else { error("Cannot open '$newfile' for writing: $!"); } } } elsif (exists $opt{patch} || $opt{changes}) { if (exists $opt{patch}) { unless ($patch_opened) { if (open PATCH, ">$opt{patch}") { $patch_opened = 1; } else { error("Cannot open '$opt{patch}' for writing: $!"); delete $opt{patch}; $opt{changes} = 1; goto fallback; } } mydiff(\*PATCH, $filename, $c); } else { fallback: info("Suggested changes:"); mydiff(\*STDOUT, $filename, $c); } } else { my $s = $file{changes} == 1 ? '' : 's'; info("$file{changes} potentially required change$s detected"); } } else { info("Looks good"); } } close PATCH if $patch_opened; exit 0; sub try_use { eval "use @_;"; return $@ eq '' } sub mydiff { local *F = shift; my($file, $str) = @_; my $diff; if (exists $opt{diff}) { $diff = run_diff($opt{diff}, $file, $str); } if (!defined $diff and try_use('Text::Diff')) { $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); $diff = <
$tmp") { print F $str; close F; if (open F, "$prog $file $tmp |") { while () { s/\Q$tmp\E/$file.patched/; $diff .= $_; } close F; unlink $tmp; return $diff; } unlink $tmp; } else { error("Cannot open '$tmp' for writing: $!"); } return undef; } sub rec_depend { my($func, $seen) = @_; return () unless exists $depends{$func}; $seen = {%{$seen||{}}}; return () if $seen->{$func}++; my %s; grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}}; } sub parse_version { my $ver = shift; if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { return ($1, $2, $3); } elsif ($ver !~ /^\d+\.[\d_]+$/) { die "cannot parse version '$ver'\n"; } $ver =~ s/_//g; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "cannot parse version '$ver'\n"; } } return ($r, $v, $s); } sub format_version { my $ver = shift; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "invalid version '$ver'\n"; } $s /= 10; $ver = sprintf "%d.%03d", $r, $v; $s > 0 and $ver .= sprintf "_%02d", $s; return $ver; } return sprintf "%d.%d.%d", $r, $v, $s; } sub info { $opt{quiet} and return; print @_, "\n"; } sub diag { $opt{quiet} and return; $opt{diag} and print @_, "\n"; } sub warning { $opt{quiet} and return; print "*** ", @_, "\n"; } sub error { print "*** ERROR: ", @_, "\n"; } my %given_hints; my %given_warnings; sub hint { $opt{quiet} and return; my $func = shift; my $rv = 0; if (exists $warnings{$func} && !$given_warnings{$func}++) { my $warn = $warnings{$func}; $warn =~ s!^!*** !mg; print "*** WARNING: $func\n", $warn; $rv++; } if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) { my $hint = $hints{$func}; $hint =~ s/^/ /mg; print " --- hint for $func ---\n", $hint; } $rv; } sub usage { my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; my %M = ( 'I' => '*' ); $usage =~ s/^\s*perl\s+\S+/$^X $0/; $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; print < }; my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms; $copy =~ s/^(?=\S+)/ /gms; $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms; $self =~ s/^SKIP.*(?=^__DATA__)/SKIP if (\@ARGV && \$ARGV[0] eq '--unstrip') { eval { require Devel::PPPort }; \$@ and die "Cannot require Devel::PPPort, please install.\\n"; if (eval \$Devel::PPPort::VERSION < $VERSION) { die "$0 was originally generated with Devel::PPPort $VERSION.\\n" . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n" . "Please install a newer version, or --unstrip will not work.\\n"; } Devel::PPPort::WriteFile(\$0); exit 0; } print <$0" or die "cannot strip $0: $!\n"; print OUT "$pl$c\n"; exit 0; } __DATA__ */ #ifndef _P_P_PORTABILITY_H_ #define _P_P_PORTABILITY_H_ #ifndef DPPP_NAMESPACE # define DPPP_NAMESPACE DPPP_ #endif #define DPPP_CAT2(x,y) CAT2(x,y) #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name) #ifndef PERL_REVISION # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) # define PERL_PATCHLEVEL_H_IMPLICIT # include # endif # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) # include # endif # ifndef PERL_REVISION # define PERL_REVISION (5) /* Replace: 1 */ # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION /* Replace PERL_PATCHLEVEL with PERL_VERSION */ /* Replace: 0 */ # endif #endif #define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) #define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) /* It is very unlikely that anyone will try to use this with Perl 6 (or greater), but who knows. */ #if PERL_REVISION != 5 # error ppport.h only works with Perl version 5 #endif /* PERL_REVISION != 5 */ #ifndef dTHR # define dTHR dNOOP #endif #ifndef dTHX # define dTHX dNOOP #endif #ifndef dTHXa # define dTHXa(x) dNOOP #endif #ifndef pTHX # define pTHX void #endif #ifndef pTHX_ # define pTHX_ #endif #ifndef aTHX # define aTHX #endif #ifndef aTHX_ # define aTHX_ #endif #if (PERL_BCDVERSION < 0x5006000) # ifdef USE_THREADS # define aTHXR thr # define aTHXR_ thr, # else # define aTHXR # define aTHXR_ # endif # define dTHXR dTHR #else # define aTHXR aTHX # define aTHXR_ aTHX_ # define dTHXR dTHX #endif #ifndef dTHXoa # define dTHXoa(x) dTHXa(x) #endif #ifdef I_LIMITS # include #endif #ifndef PERL_UCHAR_MIN # define PERL_UCHAR_MIN ((unsigned char)0) #endif #ifndef PERL_UCHAR_MAX # ifdef UCHAR_MAX # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) # else # ifdef MAXUCHAR # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) # else # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) # endif # endif #endif #ifndef PERL_USHORT_MIN # define PERL_USHORT_MIN ((unsigned short)0) #endif #ifndef PERL_USHORT_MAX # ifdef USHORT_MAX # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) # else # ifdef MAXUSHORT # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) # else # ifdef USHRT_MAX # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) # else # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) # endif # endif # endif #endif #ifndef PERL_SHORT_MAX # ifdef SHORT_MAX # define PERL_SHORT_MAX ((short)SHORT_MAX) # else # ifdef MAXSHORT /* Often used in */ # define PERL_SHORT_MAX ((short)MAXSHORT) # else # ifdef SHRT_MAX # define PERL_SHORT_MAX ((short)SHRT_MAX) # else # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) # endif # endif # endif #endif #ifndef PERL_SHORT_MIN # ifdef SHORT_MIN # define PERL_SHORT_MIN ((short)SHORT_MIN) # else # ifdef MINSHORT # define PERL_SHORT_MIN ((short)MINSHORT) # else # ifdef SHRT_MIN # define PERL_SHORT_MIN ((short)SHRT_MIN) # else # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif #ifndef PERL_UINT_MAX # ifdef UINT_MAX # define PERL_UINT_MAX ((unsigned int)UINT_MAX) # else # ifdef MAXUINT # define PERL_UINT_MAX ((unsigned int)MAXUINT) # else # define PERL_UINT_MAX (~(unsigned int)0) # endif # endif #endif #ifndef PERL_UINT_MIN # define PERL_UINT_MIN ((unsigned int)0) #endif #ifndef PERL_INT_MAX # ifdef INT_MAX # define PERL_INT_MAX ((int)INT_MAX) # else # ifdef MAXINT /* Often used in */ # define PERL_INT_MAX ((int)MAXINT) # else # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) # endif # endif #endif #ifndef PERL_INT_MIN # ifdef INT_MIN # define PERL_INT_MIN ((int)INT_MIN) # else # ifdef MININT # define PERL_INT_MIN ((int)MININT) # else # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) # endif # endif #endif #ifndef PERL_ULONG_MAX # ifdef ULONG_MAX # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) # else # ifdef MAXULONG # define PERL_ULONG_MAX ((unsigned long)MAXULONG) # else # define PERL_ULONG_MAX (~(unsigned long)0) # endif # endif #endif #ifndef PERL_ULONG_MIN # define PERL_ULONG_MIN ((unsigned long)0L) #endif #ifndef PERL_LONG_MAX # ifdef LONG_MAX # define PERL_LONG_MAX ((long)LONG_MAX) # else # ifdef MAXLONG # define PERL_LONG_MAX ((long)MAXLONG) # else # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) # endif # endif #endif #ifndef PERL_LONG_MIN # ifdef LONG_MIN # define PERL_LONG_MIN ((long)LONG_MIN) # else # ifdef MINLONG # define PERL_LONG_MIN ((long)MINLONG) # else # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) # endif # endif #endif #if defined(HAS_QUAD) && (defined(convex) || defined(uts)) # ifndef PERL_UQUAD_MAX # ifdef ULONGLONG_MAX # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) # else # ifdef MAXULONGLONG # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) # else # define PERL_UQUAD_MAX (~(unsigned long long)0) # endif # endif # endif # ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN ((unsigned long long)0L) # endif # ifndef PERL_QUAD_MAX # ifdef LONGLONG_MAX # define PERL_QUAD_MAX ((long long)LONGLONG_MAX) # else # ifdef MAXLONGLONG # define PERL_QUAD_MAX ((long long)MAXLONGLONG) # else # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) # endif # endif # endif # ifndef PERL_QUAD_MIN # ifdef LONGLONG_MIN # define PERL_QUAD_MIN ((long long)LONGLONG_MIN) # else # ifdef MINLONGLONG # define PERL_QUAD_MIN ((long long)MINLONGLONG) # else # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif /* This is based on code from 5.003 perl.h */ #ifdef HAS_QUAD # ifdef cray #ifndef IVTYPE # define IVTYPE int #endif #ifndef IV_MIN # define IV_MIN PERL_INT_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_INT_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UINT_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UINT_MAX #endif # ifdef INTSIZE #ifndef IVSIZE # define IVSIZE INTSIZE #endif # endif # else # if defined(convex) || defined(uts) #ifndef IVTYPE # define IVTYPE long long #endif #ifndef IV_MIN # define IV_MIN PERL_QUAD_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_QUAD_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UQUAD_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UQUAD_MAX #endif # ifdef LONGLONGSIZE #ifndef IVSIZE # define IVSIZE LONGLONGSIZE #endif # endif # else #ifndef IVTYPE # define IVTYPE long #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif # ifdef LONGSIZE #ifndef IVSIZE # define IVSIZE LONGSIZE #endif # endif # endif # endif #ifndef IVSIZE # define IVSIZE 8 #endif #ifndef PERL_QUAD_MIN # define PERL_QUAD_MIN IV_MIN #endif #ifndef PERL_QUAD_MAX # define PERL_QUAD_MAX IV_MAX #endif #ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN UV_MIN #endif #ifndef PERL_UQUAD_MAX # define PERL_UQUAD_MAX UV_MAX #endif #else #ifndef IVTYPE # define IVTYPE long #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif #endif #ifndef IVSIZE # ifdef LONGSIZE # define IVSIZE LONGSIZE # else # define IVSIZE 4 /* A bold guess, but the best we can make. */ # endif #endif #ifndef UVTYPE # define UVTYPE unsigned IVTYPE #endif #ifndef UVSIZE # define UVSIZE IVSIZE #endif #ifndef sv_setuv # define sv_setuv(sv, uv) \ STMT_START { \ UV TeMpUv = uv; \ if (TeMpUv <= IV_MAX) \ sv_setiv(sv, TeMpUv); \ else \ sv_setnv(sv, (double)TeMpUv); \ } STMT_END #endif #ifndef newSVuv # define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) #endif #ifndef sv_2uv # define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) #endif #ifndef SvUVX # define SvUVX(sv) ((UV)SvIVX(sv)) #endif #ifndef SvUVXx # define SvUVXx(sv) SvUVX(sv) #endif #ifndef SvUV # define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) #endif #ifndef SvUVx # define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) #endif /* Hint: sv_uv * Always use the SvUVx() macro instead of sv_uv(). */ #ifndef sv_uv # define sv_uv(sv) SvUVx(sv) #endif #if !defined(SvUOK) && defined(SvIOK_UV) # define SvUOK(sv) SvIOK_UV(sv) #endif #ifndef XST_mUV # define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) #endif #ifndef XSRETURN_UV # define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END #endif #ifndef PUSHu # define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END #endif #ifndef XPUSHu # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END #endif #ifdef HAS_MEMCMP #ifndef memNE # define memNE(s1,s2,l) (memcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) #endif #else #ifndef memNE # define memNE(s1,s2,l) (bcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) #endif #endif #ifndef MoveD # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifndef CopyD # define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifdef HAS_MEMSET #ifndef ZeroD # define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) #endif #else #ifndef ZeroD # define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) #endif #endif #ifndef PoisonWith # define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) #endif #ifndef PoisonNew # define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) #endif #ifndef PoisonFree # define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) #endif #ifndef Poison # define Poison(d,n,t) PoisonFree(d,n,t) #endif #ifndef Newx # define Newx(v,n,t) New(0,v,n,t) #endif #ifndef Newxc # define Newxc(v,n,t,c) Newc(0,v,n,t,c) #endif #ifndef Newxz # define Newxz(v,n,t) Newz(0,v,n,t) #endif #ifndef PERL_UNUSED_DECL # ifdef HASATTRIBUTE # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) # define PERL_UNUSED_DECL # else # define PERL_UNUSED_DECL __attribute__((unused)) # endif # else # define PERL_UNUSED_DECL # endif #endif #ifndef PERL_UNUSED_ARG # if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ # include # define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) # else # define PERL_UNUSED_ARG(x) ((void)x) # endif #endif #ifndef PERL_UNUSED_VAR # define PERL_UNUSED_VAR(x) ((void)x) #endif #ifndef PERL_UNUSED_CONTEXT # ifdef USE_ITHREADS # define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) # else # define PERL_UNUSED_CONTEXT # endif #endif #ifndef NOOP # define NOOP /*EMPTY*/(void)0 #endif #ifndef dNOOP # define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL #endif #ifndef NVTYPE # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) # define NVTYPE long double # else # define NVTYPE double # endif typedef NVTYPE NV; #endif #ifndef INT2PTR # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) # else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) # endif #endif #ifndef PTR2ul # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else # define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif #ifndef PTR2nat # define PTR2nat(p) (PTRV)(p) #endif #ifndef NUM2PTR # define NUM2PTR(any,d) (any)PTR2nat(d) #endif #ifndef PTR2IV # define PTR2IV(p) INT2PTR(IV,p) #endif #ifndef PTR2UV # define PTR2UV(p) INT2PTR(UV,p) #endif #ifndef PTR2NV # define PTR2NV(p) NUM2PTR(NV,p) #endif #undef START_EXTERN_C #undef END_EXTERN_C #undef EXTERN_C #ifdef __cplusplus # define START_EXTERN_C extern "C" { # define END_EXTERN_C } # define EXTERN_C extern "C" #else # define START_EXTERN_C # define END_EXTERN_C # define EXTERN_C extern #endif #if defined(PERL_GCC_PEDANTIC) # ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN # define PERL_GCC_BRACE_GROUPS_FORBIDDEN # endif #endif #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) # ifndef PERL_USE_GCC_BRACE_GROUPS # define PERL_USE_GCC_BRACE_GROUPS # endif #endif #undef STMT_START #undef STMT_END #ifdef PERL_USE_GCC_BRACE_GROUPS # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ # define STMT_END ) #else # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) # define STMT_START if (1) # define STMT_END else (void)0 # else # define STMT_START do # define STMT_END while (0) # endif #endif #ifndef boolSV # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #endif /* DEFSV appears first in 5.004_56 */ #ifndef DEFSV # define DEFSV GvSV(PL_defgv) #endif #ifndef SAVE_DEFSV # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #endif #ifndef DEFSV_set # define DEFSV_set(sv) (DEFSV = (sv)) #endif /* Older perls (<=5.003) lack AvFILLp */ #ifndef AvFILLp # define AvFILLp AvFILL #endif #ifndef ERRSV # define ERRSV get_sv("@",FALSE) #endif /* Hint: gv_stashpvn * This function's backport doesn't support the length parameter, but * rather ignores it. Portability can only be ensured if the length * parameter is used for speed reasons, but the length can always be * correctly computed from the string argument. */ #ifndef gv_stashpvn # define gv_stashpvn(str,len,create) gv_stashpv(str,create) #endif /* Replace: 1 */ #ifndef get_cv # define get_cv perl_get_cv #endif #ifndef get_sv # define get_sv perl_get_sv #endif #ifndef get_av # define get_av perl_get_av #endif #ifndef get_hv # define get_hv perl_get_hv #endif /* Replace: 0 */ #ifndef dUNDERBAR # define dUNDERBAR dNOOP #endif #ifndef UNDERBAR # define UNDERBAR DEFSV #endif #ifndef dAX # define dAX I32 ax = MARK - PL_stack_base + 1 #endif #ifndef dITEMS # define dITEMS I32 items = SP - MARK #endif #ifndef dXSTARG # define dXSTARG SV * targ = sv_newmortal() #endif #ifndef dAXMARK # define dAXMARK I32 ax = POPMARK; \ register SV ** const mark = PL_stack_base + ax++ #endif #ifndef XSprePUSH # define XSprePUSH (sp = PL_stack_base + ax - 1) #endif #if (PERL_BCDVERSION < 0x5005000) # undef XSRETURN # define XSRETURN(off) \ STMT_START { \ PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ return; \ } STMT_END #endif #ifndef XSPROTO # define XSPROTO(name) void name(pTHX_ CV* cv) #endif #ifndef SVfARG # define SVfARG(p) ((void*)(p)) #endif #ifndef PERL_ABS # define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) #endif #ifndef dVAR # define dVAR dNOOP #endif #ifndef SVf # define SVf "_" #endif #ifndef UTF8_MAXBYTES # define UTF8_MAXBYTES UTF8_MAXLEN #endif #ifndef CPERLscope # define CPERLscope(x) x #endif #ifndef PERL_HASH # define PERL_HASH(hash,str,len) \ STMT_START { \ const char *s_PeRlHaSh = str; \ I32 i_PeRlHaSh = len; \ U32 hash_PeRlHaSh = 0; \ while (i_PeRlHaSh--) \ hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ (hash) = hash_PeRlHaSh; \ } STMT_END #endif #ifndef PERLIO_FUNCS_DECL # ifdef PERLIO_FUNCS_CONST # define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs # define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) # else # define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs # define PERLIO_FUNCS_CAST(funcs) (funcs) # endif #endif /* provide these typedefs for older perls */ #if (PERL_BCDVERSION < 0x5009003) # ifdef ARGSproto typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto); # else typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX); # endif typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); #endif #ifndef isPSXSPC # define isPSXSPC(c) (isSPACE(c) || (c) == '\v') #endif #ifndef isBLANK # define isBLANK(c) ((c) == ' ' || (c) == '\t') #endif #ifdef EBCDIC #ifndef isALNUMC # define isALNUMC(c) isalnum(c) #endif #ifndef isASCII # define isASCII(c) isascii(c) #endif #ifndef isCNTRL # define isCNTRL(c) iscntrl(c) #endif #ifndef isGRAPH # define isGRAPH(c) isgraph(c) #endif #ifndef isPRINT # define isPRINT(c) isprint(c) #endif #ifndef isPUNCT # define isPUNCT(c) ispunct(c) #endif #ifndef isXDIGIT # define isXDIGIT(c) isxdigit(c) #endif #else # if (PERL_BCDVERSION < 0x5010000) /* Hint: isPRINT * The implementation in older perl versions includes all of the * isSPACE() characters, which is wrong. The version provided by * Devel::PPPort always overrides a present buggy version. */ # undef isPRINT # endif #ifndef isALNUMC # define isALNUMC(c) (isALPHA(c) || isDIGIT(c)) #endif #ifndef isASCII # define isASCII(c) ((c) <= 127) #endif #ifndef isCNTRL # define isCNTRL(c) ((c) < ' ' || (c) == 127) #endif #ifndef isGRAPH # define isGRAPH(c) (isALNUM(c) || isPUNCT(c)) #endif #ifndef isPRINT # define isPRINT(c) (((c) >= 32 && (c) < 127)) #endif #ifndef isPUNCT # define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126)) #endif #ifndef isXDIGIT # define isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) #endif #endif #ifndef PERL_SIGNALS_UNSAFE_FLAG #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 #if (PERL_BCDVERSION < 0x5008000) # define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG #else # define D_PPP_PERL_SIGNALS_INIT 0 #endif #if defined(NEED_PL_signals) static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; #elif defined(NEED_PL_signals_GLOBAL) U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; #else extern U32 DPPP_(my_PL_signals); #endif #define PL_signals DPPP_(my_PL_signals) #endif /* Hint: PL_ppaddr * Calling an op via PL_ppaddr requires passing a context argument * for threaded builds. Since the context argument is different for * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will * automatically be defined as the correct argument. */ #if (PERL_BCDVERSION <= 0x5005005) /* Replace: 1 */ # define PL_ppaddr ppaddr # define PL_no_modify no_modify /* Replace: 0 */ #endif #if (PERL_BCDVERSION <= 0x5004005) /* Replace: 1 */ # define PL_DBsignal DBsignal # define PL_DBsingle DBsingle # define PL_DBsub DBsub # define PL_DBtrace DBtrace # define PL_Sv Sv # define PL_bufend bufend # define PL_bufptr bufptr # define PL_compiling compiling # define PL_copline copline # define PL_curcop curcop # define PL_curstash curstash # define PL_debstash debstash # define PL_defgv defgv # define PL_diehook diehook # define PL_dirty dirty # define PL_dowarn dowarn # define PL_errgv errgv # define PL_error_count error_count # define PL_expect expect # define PL_hexdigit hexdigit # define PL_hints hints # define PL_in_my in_my # define PL_laststatval laststatval # define PL_lex_state lex_state # define PL_lex_stuff lex_stuff # define PL_linestr linestr # define PL_na na # define PL_perl_destruct_level perl_destruct_level # define PL_perldb perldb # define PL_rsfp_filters rsfp_filters # define PL_rsfp rsfp # define PL_stack_base stack_base # define PL_stack_sp stack_sp # define PL_statcache statcache # define PL_stdingv stdingv # define PL_sv_arenaroot sv_arenaroot # define PL_sv_no sv_no # define PL_sv_undef sv_undef # define PL_sv_yes sv_yes # define PL_tainted tainted # define PL_tainting tainting # define PL_tokenbuf tokenbuf /* Replace: 0 */ #endif /* Warning: PL_parser * For perl versions earlier than 5.9.5, this is an always * non-NULL dummy. Also, it cannot be dereferenced. Don't * use it if you can avoid is and unless you absolutely know * what you're doing. * If you always check that PL_parser is non-NULL, you can * define DPPP_PL_parser_NO_DUMMY to avoid the creation of * a dummy parser structure. */ #if (PERL_BCDVERSION >= 0x5009005) # ifdef DPPP_PL_parser_NO_DUMMY # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ (croak("panic: PL_parser == NULL in %s:%d", \ __FILE__, __LINE__), (yy_parser *) NULL))->var) # else # ifdef DPPP_PL_parser_NO_DUMMY_WARNING # define D_PPP_parser_dummy_warning(var) # else # define D_PPP_parser_dummy_warning(var) \ warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__), # endif # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var) #if defined(NEED_PL_parser) static yy_parser DPPP_(dummy_PL_parser); #elif defined(NEED_PL_parser_GLOBAL) yy_parser DPPP_(dummy_PL_parser); #else extern yy_parser DPPP_(dummy_PL_parser); #endif # endif /* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */ /* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf * Do not use this variable unless you know exactly what you're * doint. It is internal to the perl parser and may change or even * be removed in the future. As of perl 5.9.5, you have to check * for (PL_parser != NULL) for this variable to have any effect. * An always non-NULL PL_parser dummy is provided for earlier * perl versions. * If PL_parser is NULL when you try to access this variable, a * dummy is being accessed instead and a warning is issued unless * you define DPPP_PL_parser_NO_DUMMY_WARNING. * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access * this variable will croak with a panic message. */ # define PL_expect D_PPP_my_PL_parser_var(expect) # define PL_copline D_PPP_my_PL_parser_var(copline) # define PL_rsfp D_PPP_my_PL_parser_var(rsfp) # define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters) # define PL_linestr D_PPP_my_PL_parser_var(linestr) # define PL_bufptr D_PPP_my_PL_parser_var(bufptr) # define PL_bufend D_PPP_my_PL_parser_var(bufend) # define PL_lex_state D_PPP_my_PL_parser_var(lex_state) # define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff) # define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf) # define PL_in_my D_PPP_my_PL_parser_var(in_my) # define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash) # define PL_error_count D_PPP_my_PL_parser_var(error_count) #else /* ensure that PL_parser != NULL and cannot be dereferenced */ # define PL_parser ((void *) 1) #endif #ifndef mPUSHs # define mPUSHs(s) PUSHs(sv_2mortal(s)) #endif #ifndef PUSHmortal # define PUSHmortal PUSHs(sv_newmortal()) #endif #ifndef mPUSHp # define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) #endif #ifndef mPUSHn # define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) #endif #ifndef mPUSHi # define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) #endif #ifndef mPUSHu # define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) #endif #ifndef mXPUSHs # define mXPUSHs(s) XPUSHs(sv_2mortal(s)) #endif #ifndef XPUSHmortal # define XPUSHmortal XPUSHs(sv_newmortal()) #endif #ifndef mXPUSHp # define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END #endif #ifndef mXPUSHn # define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END #endif #ifndef mXPUSHi # define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END #endif #ifndef mXPUSHu # define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END #endif /* Replace: 1 */ #ifndef call_sv # define call_sv perl_call_sv #endif #ifndef call_pv # define call_pv perl_call_pv #endif #ifndef call_argv # define call_argv perl_call_argv #endif #ifndef call_method # define call_method perl_call_method #endif #ifndef eval_sv # define eval_sv perl_eval_sv #endif /* Replace: 0 */ #ifndef PERL_LOADMOD_DENY # define PERL_LOADMOD_DENY 0x1 #endif #ifndef PERL_LOADMOD_NOIMPORT # define PERL_LOADMOD_NOIMPORT 0x2 #endif #ifndef PERL_LOADMOD_IMPORT_OPS # define PERL_LOADMOD_IMPORT_OPS 0x4 #endif #ifndef G_METHOD # define G_METHOD 64 # ifdef call_sv # undef call_sv # endif # if (PERL_BCDVERSION < 0x5006000) # define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \ (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) # else # define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \ (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) # endif #endif /* Replace perl_eval_pv with eval_pv */ #ifndef eval_pv #if defined(NEED_eval_pv) static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); static #else extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); #endif #ifdef eval_pv # undef eval_pv #endif #define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) #define Perl_eval_pv DPPP_(my_eval_pv) #if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error) { dSP; SV* sv = newSVpv(p, 0); PUSHMARK(sp); eval_sv(sv, G_SCALAR); SvREFCNT_dec(sv); SPAGAIN; sv = POPs; PUTBACK; if (croak_on_error && SvTRUE(GvSV(errgv))) croak(SvPVx(GvSV(errgv), na)); return sv; } #endif #endif #ifndef vload_module #if defined(NEED_vload_module) static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); static #else extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); #endif #ifdef vload_module # undef vload_module #endif #define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d) #define Perl_vload_module DPPP_(my_vload_module) #if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL) void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) { dTHR; dVAR; OP *veop, *imop; OP * const modname = newSVOP(OP_CONST, 0, name); /* 5.005 has a somewhat hacky force_normal that doesn't croak on SvREADONLY() if PL_compling is true. Current perls take care in ck_require() to correctly turn off SvREADONLY before calling force_normal_flags(). This seems a better fix than fudging PL_compling */ SvREADONLY_off(((SVOP*)modname)->op_sv); modname->op_private |= OPpCONST_BARE; if (ver) { veop = newSVOP(OP_CONST, 0, ver); } else veop = NULL; if (flags & PERL_LOADMOD_NOIMPORT) { imop = sawparens(newNULLLIST()); } else if (flags & PERL_LOADMOD_IMPORT_OPS) { imop = va_arg(*args, OP*); } else { SV *sv; imop = NULL; sv = va_arg(*args, SV*); while (sv) { imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); sv = va_arg(*args, SV*); } } { const line_t ocopline = PL_copline; COP * const ocurcop = PL_curcop; const int oexpect = PL_expect; #if (PERL_BCDVERSION >= 0x5004000) utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), veop, modname, imop); #else utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), modname, imop); #endif PL_expect = oexpect; PL_copline = ocopline; PL_curcop = ocurcop; } } #endif #endif #ifndef load_module #if defined(NEED_load_module) static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); static #else extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); #endif #ifdef load_module # undef load_module #endif #define load_module DPPP_(my_load_module) #define Perl_load_module DPPP_(my_load_module) #if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL) void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...) { va_list args; va_start(args, ver); vload_module(flags, name, ver, &args); va_end(args); } #endif #endif #ifndef newRV_inc # define newRV_inc(sv) newRV(sv) /* Replace */ #endif #ifndef newRV_noinc #if defined(NEED_newRV_noinc) static SV * DPPP_(my_newRV_noinc)(SV *sv); static #else extern SV * DPPP_(my_newRV_noinc)(SV *sv); #endif #ifdef newRV_noinc # undef newRV_noinc #endif #define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) #define Perl_newRV_noinc DPPP_(my_newRV_noinc) #if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) SV * DPPP_(my_newRV_noinc)(SV *sv) { SV *rv = (SV *)newRV(sv); SvREFCNT_dec(sv); return rv; } #endif #endif /* Hint: newCONSTSUB * Returns a CV* as of perl-5.7.1. This return value is not supported * by Devel::PPPort. */ /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ #if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005) #if defined(NEED_newCONSTSUB) static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); static #else extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); #endif #ifdef newCONSTSUB # undef newCONSTSUB #endif #define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) #define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) /* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */ /* (There's no PL_parser in perl < 5.005, so this is completely safe) */ #define D_PPP_PL_copline PL_copline void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) { U32 oldhints = PL_hints; HV *old_cop_stash = PL_curcop->cop_stash; HV *old_curstash = PL_curstash; line_t oldline = PL_curcop->cop_line; PL_curcop->cop_line = D_PPP_PL_copline; PL_hints &= ~HINT_BLOCK_SCOPE; if (stash) PL_curstash = PL_curcop->cop_stash = stash; newSUB( #if (PERL_BCDVERSION < 0x5003022) start_subparse(), #elif (PERL_BCDVERSION == 0x5003022) start_subparse(0), #else /* 5.003_23 onwards */ start_subparse(FALSE, 0), #endif newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); PL_hints = oldhints; PL_curcop->cop_stash = old_cop_stash; PL_curstash = old_curstash; PL_curcop->cop_line = oldline; } #endif #endif /* * Boilerplate macros for initializing and accessing interpreter-local * data from C. All statics in extensions should be reworked to use * this, if you want to make the extension thread-safe. See ext/re/re.xs * for an example of the use of these macros. * * Code that uses these macros is responsible for the following: * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" * 2. Declare a typedef named my_cxt_t that is a structure that contains * all the data that needs to be interpreter-local. * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. * 4. Use the MY_CXT_INIT macro such that it is called exactly once * (typically put in the BOOT: section). * 5. Use the members of the my_cxt_t structure everywhere as * MY_CXT.member. * 6. Use the dMY_CXT macro (a declaration) in all the functions that * access MY_CXT. */ #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) #ifndef START_MY_CXT /* This must appear in all extensions that define a my_cxt_t structure, * right after the definition (i.e. at file scope). The non-threads * case below uses it to declare the data as static. */ #define START_MY_CXT #if (PERL_BCDVERSION < 0x5004068) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) #else /* >= perl5.004_68 */ #define dMY_CXT_SV \ SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ sizeof(MY_CXT_KEY)-1, TRUE) #endif /* < perl5.004_68 */ /* This declaration should be used within all functions that use the * interpreter-local data. */ #define dMY_CXT \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ #define MY_CXT_INIT \ dMY_CXT_SV; \ /* newSV() allocates one more than needed */ \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Zero(my_cxtp, 1, my_cxt_t); \ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) /* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */ #define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT * is used. Use is similar to pTHX, aTHX etc. */ #define pMY_CXT my_cxt_t *my_cxtp #define pMY_CXT_ pMY_CXT, #define _pMY_CXT ,pMY_CXT #define aMY_CXT my_cxtp #define aMY_CXT_ aMY_CXT, #define _aMY_CXT ,aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE /* Clones the per-interpreter data. */ #define MY_CXT_CLONE \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) #endif #else /* single interpreter */ #ifndef START_MY_CXT #define START_MY_CXT static my_cxt_t my_cxt; #define dMY_CXT_SV dNOOP #define dMY_CXT dNOOP #define MY_CXT_INIT NOOP #define MY_CXT my_cxt #define pMY_CXT void #define pMY_CXT_ #define _pMY_CXT #define aMY_CXT #define aMY_CXT_ #define _aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE #define MY_CXT_CLONE NOOP #endif #endif #ifndef IVdf # if IVSIZE == LONGSIZE # define IVdf "ld" # define UVuf "lu" # define UVof "lo" # define UVxf "lx" # define UVXf "lX" # else # if IVSIZE == INTSIZE # define IVdf "d" # define UVuf "u" # define UVof "o" # define UVxf "x" # define UVXf "X" # endif # endif #endif #ifndef NVef # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000) /* Not very likely, but let's try anyway. */ # define NVef PERL_PRIeldbl # define NVff PERL_PRIfldbl # define NVgf PERL_PRIgldbl # else # define NVef "e" # define NVff "f" # define NVgf "g" # endif #endif #ifndef SvREFCNT_inc # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ if (_sv) \ (SvREFCNT(_sv))++; \ _sv; \ }) # else # define SvREFCNT_inc(sv) \ ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) # endif #endif #ifndef SvREFCNT_inc_simple # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_simple(sv) \ ({ \ if (sv) \ (SvREFCNT(sv))++; \ (SV *)(sv); \ }) # else # define SvREFCNT_inc_simple(sv) \ ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) # endif #endif #ifndef SvREFCNT_inc_NN # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_NN(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ SvREFCNT(_sv)++; \ _sv; \ }) # else # define SvREFCNT_inc_NN(sv) \ (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) # endif #endif #ifndef SvREFCNT_inc_void # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_void(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ if (_sv) \ (void)(SvREFCNT(_sv)++); \ }) # else # define SvREFCNT_inc_void(sv) \ (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) # endif #endif #ifndef SvREFCNT_inc_simple_void # define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END #endif #ifndef SvREFCNT_inc_simple_NN # define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) #endif #ifndef SvREFCNT_inc_void_NN # define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) #endif #ifndef SvREFCNT_inc_simple_void_NN # define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) #endif #ifndef newSV_type #if defined(NEED_newSV_type) static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); static #else extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); #endif #ifdef newSV_type # undef newSV_type #endif #define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a) #define Perl_newSV_type DPPP_(my_newSV_type) #if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL) SV* DPPP_(my_newSV_type)(pTHX_ svtype const t) { SV* const sv = newSV(0); sv_upgrade(sv, t); return sv; } #endif #endif #if (PERL_BCDVERSION < 0x5006000) # define D_PPP_CONSTPV_ARG(x) ((char *) (x)) #else # define D_PPP_CONSTPV_ARG(x) (x) #endif #ifndef newSVpvn # define newSVpvn(data,len) ((data) \ ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ : newSV(0)) #endif #ifndef newSVpvn_utf8 # define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) #endif #ifndef SVf_UTF8 # define SVf_UTF8 0 #endif #ifndef newSVpvn_flags #if defined(NEED_newSVpvn_flags) static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); static #else extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); #endif #ifdef newSVpvn_flags # undef newSVpvn_flags #endif #define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c) #define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags) #if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL) SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags) { SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len); SvFLAGS(sv) |= (flags & SVf_UTF8); return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv; } #endif #endif /* Backwards compatibility stuff... :-( */ #if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen) # define NEED_sv_2pv_flags #endif #if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL) # define NEED_sv_2pv_flags_GLOBAL #endif /* Hint: sv_2pv_nolen * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen(). */ #ifndef sv_2pv_nolen # define sv_2pv_nolen(sv) SvPV_nolen(sv) #endif #ifdef SvPVbyte /* Hint: SvPVbyte * Does not work in perl-5.6.1, ppport.h implements a version * borrowed from perl-5.7.3. */ #if (PERL_BCDVERSION < 0x5007000) #if defined(NEED_sv_2pvbyte) static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); static #else extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); #endif #ifdef sv_2pvbyte # undef sv_2pvbyte #endif #define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) #define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) #if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp) { sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } #endif /* Hint: sv_2pvbyte * Use the SvPVbyte() macro instead of sv_2pvbyte(). */ #undef SvPVbyte #define SvPVbyte(sv, lp) \ ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) #endif #else # define SvPVbyte SvPV # define sv_2pvbyte sv_2pv #endif #ifndef sv_2pvbyte_nolen # define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv) #endif /* Hint: sv_pvn * Always use the SvPV() macro instead of sv_pvn(). */ /* Hint: sv_pvn_force * Always use the SvPV_force() macro instead of sv_pvn_force(). */ /* If these are undefined, they're not handled by the core anyway */ #ifndef SV_IMMEDIATE_UNREF # define SV_IMMEDIATE_UNREF 0 #endif #ifndef SV_GMAGIC # define SV_GMAGIC 0 #endif #ifndef SV_COW_DROP_PV # define SV_COW_DROP_PV 0 #endif #ifndef SV_UTF8_NO_ENCODING # define SV_UTF8_NO_ENCODING 0 #endif #ifndef SV_NOSTEAL # define SV_NOSTEAL 0 #endif #ifndef SV_CONST_RETURN # define SV_CONST_RETURN 0 #endif #ifndef SV_MUTABLE_RETURN # define SV_MUTABLE_RETURN 0 #endif #ifndef SV_SMAGIC # define SV_SMAGIC 0 #endif #ifndef SV_HAS_TRAILING_NUL # define SV_HAS_TRAILING_NUL 0 #endif #ifndef SV_COW_SHARED_HASH_KEYS # define SV_COW_SHARED_HASH_KEYS 0 #endif #if (PERL_BCDVERSION < 0x5007002) #if defined(NEED_sv_2pv_flags) static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); static #else extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); #endif #ifdef sv_2pv_flags # undef sv_2pv_flags #endif #define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c) #define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags) #if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL) char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) { STRLEN n_a = (STRLEN) flags; return sv_2pv(sv, lp ? lp : &n_a); } #endif #if defined(NEED_sv_pvn_force_flags) static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); static #else extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); #endif #ifdef sv_pvn_force_flags # undef sv_pvn_force_flags #endif #define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c) #define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags) #if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL) char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) { STRLEN n_a = (STRLEN) flags; return sv_pvn_force(sv, lp ? lp : &n_a); } #endif #endif #if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) ) # define DPPP_SVPV_NOLEN_LP_ARG &PL_na #else # define DPPP_SVPV_NOLEN_LP_ARG 0 #endif #ifndef SvPV_const # define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_mutable # define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_flags # define SvPV_flags(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags)) #endif #ifndef SvPV_flags_const # define SvPV_flags_const(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \ (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN)) #endif #ifndef SvPV_flags_const_nolen # define SvPV_flags_const_nolen(sv, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX_const(sv) : \ (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN)) #endif #ifndef SvPV_flags_mutable # define SvPV_flags_mutable(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \ sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) #endif #ifndef SvPV_force # define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_force_nolen # define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC) #endif #ifndef SvPV_force_mutable # define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_force_nomg # define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0) #endif #ifndef SvPV_force_nomg_nolen # define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0) #endif #ifndef SvPV_force_flags # define SvPV_force_flags(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags)) #endif #ifndef SvPV_force_flags_nolen # define SvPV_force_flags_nolen(sv, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags)) #endif #ifndef SvPV_force_flags_mutable # define SvPV_force_flags_mutable(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \ : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) #endif #ifndef SvPV_nolen # define SvPV_nolen(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC)) #endif #ifndef SvPV_nolen_const # define SvPV_nolen_const(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN)) #endif #ifndef SvPV_nomg # define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0) #endif #ifndef SvPV_nomg_const # define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0) #endif #ifndef SvPV_nomg_const_nolen # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) #endif #ifndef SvPV_renew # define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \ SvPV_set((sv), (char *) saferealloc( \ (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \ } STMT_END #endif #ifndef SvMAGIC_set # define SvMAGIC_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END #endif #if (PERL_BCDVERSION < 0x5009003) #ifndef SvPVX_const # define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) #endif #ifndef SvPVX_mutable # define SvPVX_mutable(sv) (0 + SvPVX(sv)) #endif #ifndef SvRV_set # define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END #endif #else #ifndef SvPVX_const # define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) #endif #ifndef SvPVX_mutable # define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) #endif #ifndef SvRV_set # define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ ((sv)->sv_u.svu_rv = (val)); } STMT_END #endif #endif #ifndef SvSTASH_set # define SvSTASH_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END #endif #if (PERL_BCDVERSION < 0x5004000) #ifndef SvUV_set # define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END #endif #else #ifndef SvUV_set # define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END #endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf) #if defined(NEED_vnewSVpvf) static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); static #else extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); #endif #ifdef vnewSVpvf # undef vnewSVpvf #endif #define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) #define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) #if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) { register SV *sv = newSV(0); sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); return sv; } #endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf) # define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf) # define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); #endif #define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #ifdef PERL_IMPLICIT_CONTEXT #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); #endif #define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif /* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */ #ifndef sv_catpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext # else # define sv_catpvf_mg Perl_sv_catpvf_mg # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg) # define sv_vcatpvf_mg(sv, pat, args) \ STMT_START { \ sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); #endif #define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #ifdef PERL_IMPLICIT_CONTEXT #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); #endif #define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif /* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */ #ifndef sv_setpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext # else # define sv_setpvf_mg Perl_sv_setpvf_mg # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg) # define sv_vsetpvf_mg(sv, pat, args) \ STMT_START { \ sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif #ifndef newSVpvn_share #if defined(NEED_newSVpvn_share) static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); static #else extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); #endif #ifdef newSVpvn_share # undef newSVpvn_share #endif #define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c) #define Perl_newSVpvn_share DPPP_(my_newSVpvn_share) #if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL) SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) { SV *sv; if (len < 0) len = -len; if (!hash) PERL_HASH(hash, (char*) src, len); sv = newSVpvn((char *) src, len); sv_upgrade(sv, SVt_PVIV); SvIVX(sv) = hash; SvREADONLY_on(sv); SvPOK_on(sv); return sv; } #endif #endif #ifndef SvSHARED_HASH # define SvSHARED_HASH(sv) (0 + SvUVX(sv)) #endif #ifndef HvNAME_get # define HvNAME_get(hv) HvNAME(hv) #endif #ifndef HvNAMELEN_get # define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0) #endif #ifndef GvSVn # define GvSVn(gv) GvSV(gv) #endif #ifndef isGV_with_GP # define isGV_with_GP(gv) isGV(gv) #endif #ifndef WARN_ALL # define WARN_ALL 0 #endif #ifndef WARN_CLOSURE # define WARN_CLOSURE 1 #endif #ifndef WARN_DEPRECATED # define WARN_DEPRECATED 2 #endif #ifndef WARN_EXITING # define WARN_EXITING 3 #endif #ifndef WARN_GLOB # define WARN_GLOB 4 #endif #ifndef WARN_IO # define WARN_IO 5 #endif #ifndef WARN_CLOSED # define WARN_CLOSED 6 #endif #ifndef WARN_EXEC # define WARN_EXEC 7 #endif #ifndef WARN_LAYER # define WARN_LAYER 8 #endif #ifndef WARN_NEWLINE # define WARN_NEWLINE 9 #endif #ifndef WARN_PIPE # define WARN_PIPE 10 #endif #ifndef WARN_UNOPENED # define WARN_UNOPENED 11 #endif #ifndef WARN_MISC # define WARN_MISC 12 #endif #ifndef WARN_NUMERIC # define WARN_NUMERIC 13 #endif #ifndef WARN_ONCE # define WARN_ONCE 14 #endif #ifndef WARN_OVERFLOW # define WARN_OVERFLOW 15 #endif #ifndef WARN_PACK # define WARN_PACK 16 #endif #ifndef WARN_PORTABLE # define WARN_PORTABLE 17 #endif #ifndef WARN_RECURSION # define WARN_RECURSION 18 #endif #ifndef WARN_REDEFINE # define WARN_REDEFINE 19 #endif #ifndef WARN_REGEXP # define WARN_REGEXP 20 #endif #ifndef WARN_SEVERE # define WARN_SEVERE 21 #endif #ifndef WARN_DEBUGGING # define WARN_DEBUGGING 22 #endif #ifndef WARN_INPLACE # define WARN_INPLACE 23 #endif #ifndef WARN_INTERNAL # define WARN_INTERNAL 24 #endif #ifndef WARN_MALLOC # define WARN_MALLOC 25 #endif #ifndef WARN_SIGNAL # define WARN_SIGNAL 26 #endif #ifndef WARN_SUBSTR # define WARN_SUBSTR 27 #endif #ifndef WARN_SYNTAX # define WARN_SYNTAX 28 #endif #ifndef WARN_AMBIGUOUS # define WARN_AMBIGUOUS 29 #endif #ifndef WARN_BAREWORD # define WARN_BAREWORD 30 #endif #ifndef WARN_DIGIT # define WARN_DIGIT 31 #endif #ifndef WARN_PARENTHESIS # define WARN_PARENTHESIS 32 #endif #ifndef WARN_PRECEDENCE # define WARN_PRECEDENCE 33 #endif #ifndef WARN_PRINTF # define WARN_PRINTF 34 #endif #ifndef WARN_PROTOTYPE # define WARN_PROTOTYPE 35 #endif #ifndef WARN_QW # define WARN_QW 36 #endif #ifndef WARN_RESERVED # define WARN_RESERVED 37 #endif #ifndef WARN_SEMICOLON # define WARN_SEMICOLON 38 #endif #ifndef WARN_TAINT # define WARN_TAINT 39 #endif #ifndef WARN_THREADS # define WARN_THREADS 40 #endif #ifndef WARN_UNINITIALIZED # define WARN_UNINITIALIZED 41 #endif #ifndef WARN_UNPACK # define WARN_UNPACK 42 #endif #ifndef WARN_UNTIE # define WARN_UNTIE 43 #endif #ifndef WARN_UTF8 # define WARN_UTF8 44 #endif #ifndef WARN_VOID # define WARN_VOID 45 #endif #ifndef WARN_ASSERTIONS # define WARN_ASSERTIONS 46 #endif #ifndef packWARN # define packWARN(a) (a) #endif #ifndef ckWARN # ifdef G_WARN_ON # define ckWARN(a) (PL_dowarn & G_WARN_ON) # else # define ckWARN(a) PL_dowarn # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(warner) #if defined(NEED_warner) static void DPPP_(my_warner)(U32 err, const char *pat, ...); static #else extern void DPPP_(my_warner)(U32 err, const char *pat, ...); #endif #define Perl_warner DPPP_(my_warner) #if defined(NEED_warner) || defined(NEED_warner_GLOBAL) void DPPP_(my_warner)(U32 err, const char *pat, ...) { SV *sv; va_list args; PERL_UNUSED_ARG(err); va_start(args, pat); sv = vnewSVpvf(pat, &args); va_end(args); sv_2mortal(sv); warn("%s", SvPV_nolen(sv)); } #define warner Perl_warner #define Perl_warner_nocontext Perl_warner #endif #endif /* concatenating with "" ensures that only literal strings are accepted as argument * note that STR_WITH_LEN() can't be used as argument to macros or functions that * under some configurations might be macros */ #ifndef STR_WITH_LEN # define STR_WITH_LEN(s) (s ""), (sizeof(s)-1) #endif #ifndef newSVpvs # define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) #endif #ifndef newSVpvs_flags # define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) #endif #ifndef sv_catpvs # define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) #endif #ifndef sv_setpvs # define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) #endif #ifndef hv_fetchs # define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) #endif #ifndef hv_stores # define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) #endif #ifndef gv_fetchpvn_flags # define gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt) #endif #ifndef gv_fetchpvs # define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt) #endif #ifndef gv_stashpvs # define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags) #endif #ifndef SvGETMAGIC # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #endif #ifndef PERL_MAGIC_sv # define PERL_MAGIC_sv '\0' #endif #ifndef PERL_MAGIC_overload # define PERL_MAGIC_overload 'A' #endif #ifndef PERL_MAGIC_overload_elem # define PERL_MAGIC_overload_elem 'a' #endif #ifndef PERL_MAGIC_overload_table # define PERL_MAGIC_overload_table 'c' #endif #ifndef PERL_MAGIC_bm # define PERL_MAGIC_bm 'B' #endif #ifndef PERL_MAGIC_regdata # define PERL_MAGIC_regdata 'D' #endif #ifndef PERL_MAGIC_regdatum # define PERL_MAGIC_regdatum 'd' #endif #ifndef PERL_MAGIC_env # define PERL_MAGIC_env 'E' #endif #ifndef PERL_MAGIC_envelem # define PERL_MAGIC_envelem 'e' #endif #ifndef PERL_MAGIC_fm # define PERL_MAGIC_fm 'f' #endif #ifndef PERL_MAGIC_regex_global # define PERL_MAGIC_regex_global 'g' #endif #ifndef PERL_MAGIC_isa # define PERL_MAGIC_isa 'I' #endif #ifndef PERL_MAGIC_isaelem # define PERL_MAGIC_isaelem 'i' #endif #ifndef PERL_MAGIC_nkeys # define PERL_MAGIC_nkeys 'k' #endif #ifndef PERL_MAGIC_dbfile # define PERL_MAGIC_dbfile 'L' #endif #ifndef PERL_MAGIC_dbline # define PERL_MAGIC_dbline 'l' #endif #ifndef PERL_MAGIC_mutex # define PERL_MAGIC_mutex 'm' #endif #ifndef PERL_MAGIC_shared # define PERL_MAGIC_shared 'N' #endif #ifndef PERL_MAGIC_shared_scalar # define PERL_MAGIC_shared_scalar 'n' #endif #ifndef PERL_MAGIC_collxfrm # define PERL_MAGIC_collxfrm 'o' #endif #ifndef PERL_MAGIC_tied # define PERL_MAGIC_tied 'P' #endif #ifndef PERL_MAGIC_tiedelem # define PERL_MAGIC_tiedelem 'p' #endif #ifndef PERL_MAGIC_tiedscalar # define PERL_MAGIC_tiedscalar 'q' #endif #ifndef PERL_MAGIC_qr # define PERL_MAGIC_qr 'r' #endif #ifndef PERL_MAGIC_sig # define PERL_MAGIC_sig 'S' #endif #ifndef PERL_MAGIC_sigelem # define PERL_MAGIC_sigelem 's' #endif #ifndef PERL_MAGIC_taint # define PERL_MAGIC_taint 't' #endif #ifndef PERL_MAGIC_uvar # define PERL_MAGIC_uvar 'U' #endif #ifndef PERL_MAGIC_uvar_elem # define PERL_MAGIC_uvar_elem 'u' #endif #ifndef PERL_MAGIC_vstring # define PERL_MAGIC_vstring 'V' #endif #ifndef PERL_MAGIC_vec # define PERL_MAGIC_vec 'v' #endif #ifndef PERL_MAGIC_utf8 # define PERL_MAGIC_utf8 'w' #endif #ifndef PERL_MAGIC_substr # define PERL_MAGIC_substr 'x' #endif #ifndef PERL_MAGIC_defelem # define PERL_MAGIC_defelem 'y' #endif #ifndef PERL_MAGIC_glob # define PERL_MAGIC_glob '*' #endif #ifndef PERL_MAGIC_arylen # define PERL_MAGIC_arylen '#' #endif #ifndef PERL_MAGIC_pos # define PERL_MAGIC_pos '.' #endif #ifndef PERL_MAGIC_backref # define PERL_MAGIC_backref '<' #endif #ifndef PERL_MAGIC_ext # define PERL_MAGIC_ext '~' #endif /* That's the best we can do... */ #ifndef sv_catpvn_nomg # define sv_catpvn_nomg sv_catpvn #endif #ifndef sv_catsv_nomg # define sv_catsv_nomg sv_catsv #endif #ifndef sv_setsv_nomg # define sv_setsv_nomg sv_setsv #endif #ifndef sv_pvn_nomg # define sv_pvn_nomg sv_pvn #endif #ifndef SvIV_nomg # define SvIV_nomg SvIV #endif #ifndef SvUV_nomg # define SvUV_nomg SvUV #endif #ifndef sv_catpv_mg # define sv_catpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catpvn_mg # define sv_catpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catsv_mg # define sv_catsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_catsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setiv_mg # define sv_setiv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setiv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setnv_mg # define sv_setnv_mg(sv, num) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setnv(TeMpSv,num); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpv_mg # define sv_setpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpvn_mg # define sv_setpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setsv_mg # define sv_setsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_setsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setuv_mg # define sv_setuv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setuv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_usepvn_mg # define sv_usepvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_usepvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef SvVSTRING_mg # define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL) #endif /* Hint: sv_magic_portable * This is a compatibility function that is only available with * Devel::PPPort. It is NOT in the perl core. * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when * it is being passed a name pointer with namlen == 0. In that * case, perl 5.8.0 and later store the pointer, not a copy of it. * The compatibility can be provided back to perl 5.004. With * earlier versions, the code will not compile. */ #if (PERL_BCDVERSION < 0x5004000) /* code that uses sv_magic_portable will not compile */ #elif (PERL_BCDVERSION < 0x5008000) # define sv_magic_portable(sv, obj, how, name, namlen) \ STMT_START { \ SV *SvMp_sv = (sv); \ char *SvMp_name = (char *) (name); \ I32 SvMp_namlen = (namlen); \ if (SvMp_name && SvMp_namlen == 0) \ { \ MAGIC *mg; \ sv_magic(SvMp_sv, obj, how, 0, 0); \ mg = SvMAGIC(SvMp_sv); \ mg->mg_len = -42; /* XXX: this is the tricky part */ \ mg->mg_ptr = SvMp_name; \ } \ else \ { \ sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \ } \ } STMT_END #else # define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e) #endif #ifdef USE_ITHREADS #ifndef CopFILE # define CopFILE(c) ((c)->cop_file) #endif #ifndef CopFILEGV # define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) ((c)->cop_stashpv) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) #endif #ifndef CopSTASH # define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ || (CopSTASHPV(c) && HvNAME(hv) \ && strEQ(CopSTASHPV(c), HvNAME(hv))))) #endif #else #ifndef CopFILEGV # define CopFILEGV(c) ((c)->cop_filegv) #endif #ifndef CopFILEGV_set # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) #endif #ifndef CopFILE # define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) #endif #ifndef CopSTASH # define CopSTASH(c) ((c)->cop_stash) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) #endif #endif /* USE_ITHREADS */ #ifndef IN_PERL_COMPILETIME # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) #endif #ifndef IN_LOCALE_RUNTIME # define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) #endif #ifndef IN_LOCALE_COMPILETIME # define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) #endif #ifndef IN_LOCALE # define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) #endif #ifndef IS_NUMBER_IN_UV # define IS_NUMBER_IN_UV 0x01 #endif #ifndef IS_NUMBER_GREATER_THAN_UV_MAX # define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 #endif #ifndef IS_NUMBER_NOT_INT # define IS_NUMBER_NOT_INT 0x04 #endif #ifndef IS_NUMBER_NEG # define IS_NUMBER_NEG 0x08 #endif #ifndef IS_NUMBER_INFINITY # define IS_NUMBER_INFINITY 0x10 #endif #ifndef IS_NUMBER_NAN # define IS_NUMBER_NAN 0x20 #endif #ifndef GROK_NUMERIC_RADIX # define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) #endif #ifndef PERL_SCAN_GREATER_THAN_UV_MAX # define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 #endif #ifndef PERL_SCAN_SILENT_ILLDIGIT # define PERL_SCAN_SILENT_ILLDIGIT 0x04 #endif #ifndef PERL_SCAN_ALLOW_UNDERSCORES # define PERL_SCAN_ALLOW_UNDERSCORES 0x01 #endif #ifndef PERL_SCAN_DISALLOW_PREFIX # define PERL_SCAN_DISALLOW_PREFIX 0x02 #endif #ifndef grok_numeric_radix #if defined(NEED_grok_numeric_radix) static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); static #else extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); #endif #ifdef grok_numeric_radix # undef grok_numeric_radix #endif #define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) #define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) #if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) bool DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) { #ifdef USE_LOCALE_NUMERIC #ifdef PL_numeric_radix_sv if (PL_numeric_radix_sv && IN_LOCALE) { STRLEN len; char* radix = SvPV(PL_numeric_radix_sv, len); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #else /* older perls don't have PL_numeric_radix_sv so the radix * must manually be requested from locale.h */ #include dTHR; /* needed for older threaded perls */ struct lconv *lc = localeconv(); char *radix = lc->decimal_point; if (radix && IN_LOCALE) { STRLEN len = strlen(radix); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #endif #endif /* USE_LOCALE_NUMERIC */ /* always try "." if numeric radix didn't match because * we may have data from different locales mixed */ if (*sp < send && **sp == '.') { ++*sp; return TRUE; } return FALSE; } #endif #endif #ifndef grok_number #if defined(NEED_grok_number) static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); static #else extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); #endif #ifdef grok_number # undef grok_number #endif #define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) #define Perl_grok_number DPPP_(my_grok_number) #if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) int DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) { const char *s = pv; const char *send = pv + len; const UV max_div_10 = UV_MAX / 10; const char max_mod_10 = UV_MAX % 10; int numtype = 0; int sawinf = 0; int sawnan = 0; while (s < send && isSPACE(*s)) s++; if (s == send) { return 0; } else if (*s == '-') { s++; numtype = IS_NUMBER_NEG; } else if (*s == '+') s++; if (s == send) return 0; /* next must be digit or the radix separator or beginning of infinity */ if (isDIGIT(*s)) { /* UVs are at least 32 bits, so the first 9 decimal digits cannot overflow. */ UV value = *s - '0'; /* This construction seems to be more optimiser friendly. (without it gcc does the isDIGIT test and the *s - '0' separately) With it gcc on arm is managing 6 instructions (6 cycles) per digit. In theory the optimiser could deduce how far to unroll the loop before checking for overflow. */ if (++s < send) { int digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { /* Now got 9 digits, so need to check each time for overflow. */ digit = *s - '0'; while (digit >= 0 && digit <= 9 && (value < max_div_10 || (value == max_div_10 && digit <= max_mod_10))) { value = value * 10 + digit; if (++s < send) digit = *s - '0'; else break; } if (digit >= 0 && digit <= 9 && (s < send)) { /* value overflowed. skip the remaining digits, don't worry about setting *valuep. */ do { s++; } while (s < send && isDIGIT(*s)); numtype |= IS_NUMBER_GREATER_THAN_UV_MAX; goto skip_value; } } } } } } } } } } } } } } } } } } numtype |= IS_NUMBER_IN_UV; if (valuep) *valuep = value; skip_value: if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT; while (s < send && isDIGIT(*s)) /* optional digits after the radix */ s++; } } else if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ /* no digits before the radix means we need digits after it */ if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); if (valuep) { /* integer approximation is valid - it's 0. */ *valuep = 0; } } else return 0; } else if (*s == 'I' || *s == 'i') { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; s++; if (s < send && (*s == 'I' || *s == 'i')) { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; s++; if (s == send || (*s != 'T' && *s != 't')) return 0; s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; s++; } sawinf = 1; } else if (*s == 'N' || *s == 'n') { /* XXX TODO: There are signaling NaNs and quiet NaNs. */ s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; sawnan = 1; } else return 0; if (sawinf) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; } else if (sawnan) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; } else if (s < send) { /* we can have an optional exponent part */ if (*s == 'e' || *s == 'E') { /* The only flag we keep is sign. Blow away any "it's UV" */ numtype &= IS_NUMBER_NEG; numtype |= IS_NUMBER_NOT_INT; s++; if (s < send && (*s == '-' || *s == '+')) s++; if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); } else return 0; } } while (s < send && isSPACE(*s)) s++; if (s >= send) return numtype; if (len == 10 && memEQ(pv, "0 but true", 10)) { if (valuep) *valuep = 0; return IS_NUMBER_IN_UV; } return 0; } #endif #endif /* * The grok_* routines have been modified to use warn() instead of * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, * which is why the stack variable has been renamed to 'xdigit'. */ #ifndef grok_bin #if defined(NEED_grok_bin) static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_bin # undef grok_bin #endif #define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) #define Perl_grok_bin DPPP_(my_grok_bin) #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) UV DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_2 = UV_MAX / 2; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading b or 0b. for compatibility silently suffer "b" and "0b" as valid binary numbers. */ if (len >= 1) { if (s[0] == 'b') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'b') { s+=2; len-=2; } } } for (; len-- && *s; s++) { char bit = *s; if (bit == '0' || bit == '1') { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_bin. */ redo: if (!overflowed) { if (value <= max_div_2) { value = (value << 1) | (bit - '0'); continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in binary number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 2.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount. */ value_nv += (NV)(bit - '0'); continue; } if (bit == '_' && len && allow_underscores && (bit = s[1]) && (bit == '0' || bit == '1')) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal binary digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Binary number > 0b11111111111111111111111111111111 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_hex #if defined(NEED_grok_hex) static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_hex # undef grok_hex #endif #define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) #define Perl_grok_hex DPPP_(my_grok_hex) #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) UV DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_16 = UV_MAX / 16; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; const char *xdigit; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading x or 0x. for compatibility silently suffer "x" and "0x" as valid hex numbers. */ if (len >= 1) { if (s[0] == 'x') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'x') { s+=2; len-=2; } } } for (; len-- && *s; s++) { xdigit = strchr((char *) PL_hexdigit, *s); if (xdigit) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_hex. */ redo: if (!overflowed) { if (value <= max_div_16) { value = (value << 4) | ((xdigit - PL_hexdigit) & 15); continue; } warn("Integer overflow in hexadecimal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 16.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 16-tuples. */ value_nv += (NV)((xdigit - PL_hexdigit) & 15); continue; } if (*s == '_' && len && allow_underscores && s[1] && (xdigit = strchr((char *) PL_hexdigit, s[1]))) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal hexadecimal digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Hexadecimal number > 0xffffffff non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_oct #if defined(NEED_grok_oct) static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_oct # undef grok_oct #endif #define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) #define Perl_grok_oct DPPP_(my_grok_oct) #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) UV DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_8 = UV_MAX / 8; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; for (; len-- && *s; s++) { /* gcc 2.95 optimiser not smart enough to figure that this subtraction out front allows slicker code. */ int digit = *s - '0'; if (digit >= 0 && digit <= 7) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. */ redo: if (!overflowed) { if (value <= max_div_8) { value = (value << 3) | digit; continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in octal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 8.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 8-tuples. */ value_nv += (NV)digit; continue; } if (digit == ('_' - '0') && len && allow_underscores && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) { --len; ++s; goto redo; } /* Allow \octal to work the DWIM way (that is, stop scanning * as soon as non-octal characters are seen, complain only iff * someone seems to want to use the digits eight and nine). */ if (digit == 8 || digit == 9) { if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal octal digit '%c' ignored", *s); } break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Octal number > 037777777777 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #if !defined(my_snprintf) #if defined(NEED_my_snprintf) static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); static #else extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); #endif #define my_snprintf DPPP_(my_my_snprintf) #define Perl_my_snprintf DPPP_(my_my_snprintf) #if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL) int DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) { dTHX; int retval; va_list ap; va_start(ap, format); #ifdef HAS_VSNPRINTF retval = vsnprintf(buffer, len, format, ap); #else retval = vsprintf(buffer, format, ap); #endif va_end(ap); if (retval < 0 || (len > 0 && (Size_t)retval >= len)) Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); return retval; } #endif #endif #if !defined(my_sprintf) #if defined(NEED_my_sprintf) static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); static #else extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); #endif #define my_sprintf DPPP_(my_my_sprintf) #define Perl_my_sprintf DPPP_(my_my_sprintf) #if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL) int DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...) { va_list args; va_start(args, pat); vsprintf(buffer, pat, args); va_end(args); return strlen(buffer); } #endif #endif #ifdef NO_XSLOCKS # ifdef dJMPENV # define dXCPT dJMPENV; int rEtV = 0 # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) # define XCPT_TRY_END JMPENV_POP; # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW JMPENV_JUMP(rEtV) # else # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW Siglongjmp(top_env, rEtV) # endif #endif #if !defined(my_strlcat) #if defined(NEED_my_strlcat) static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); static #else extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); #endif #define my_strlcat DPPP_(my_my_strlcat) #define Perl_my_strlcat DPPP_(my_my_strlcat) #if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL) Size_t DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size) { Size_t used, length, copy; used = strlen(dst); length = strlen(src); if (size > 0 && used < size - 1) { copy = (length >= size - used) ? size - used - 1 : length; memcpy(dst + used, src, copy); dst[used + copy] = '\0'; } return used + length; } #endif #endif #if !defined(my_strlcpy) #if defined(NEED_my_strlcpy) static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); static #else extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); #endif #define my_strlcpy DPPP_(my_my_strlcpy) #define Perl_my_strlcpy DPPP_(my_my_strlcpy) #if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL) Size_t DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size) { Size_t length, copy; length = strlen(src); if (size > 0) { copy = (length >= size) ? size - 1 : length; memcpy(dst, src, copy); dst[copy] = '\0'; } return length; } #endif #endif #ifndef PERL_PV_ESCAPE_QUOTE # define PERL_PV_ESCAPE_QUOTE 0x0001 #endif #ifndef PERL_PV_PRETTY_QUOTE # define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE #endif #ifndef PERL_PV_PRETTY_ELLIPSES # define PERL_PV_PRETTY_ELLIPSES 0x0002 #endif #ifndef PERL_PV_PRETTY_LTGT # define PERL_PV_PRETTY_LTGT 0x0004 #endif #ifndef PERL_PV_ESCAPE_FIRSTCHAR # define PERL_PV_ESCAPE_FIRSTCHAR 0x0008 #endif #ifndef PERL_PV_ESCAPE_UNI # define PERL_PV_ESCAPE_UNI 0x0100 #endif #ifndef PERL_PV_ESCAPE_UNI_DETECT # define PERL_PV_ESCAPE_UNI_DETECT 0x0200 #endif #ifndef PERL_PV_ESCAPE_ALL # define PERL_PV_ESCAPE_ALL 0x1000 #endif #ifndef PERL_PV_ESCAPE_NOBACKSLASH # define PERL_PV_ESCAPE_NOBACKSLASH 0x2000 #endif #ifndef PERL_PV_ESCAPE_NOCLEAR # define PERL_PV_ESCAPE_NOCLEAR 0x4000 #endif #ifndef PERL_PV_ESCAPE_RE # define PERL_PV_ESCAPE_RE 0x8000 #endif #ifndef PERL_PV_PRETTY_NOCLEAR # define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR #endif #ifndef PERL_PV_PRETTY_DUMP # define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE #endif #ifndef PERL_PV_PRETTY_REGPROP # define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE #endif /* Hint: pv_escape * Note that unicode functionality is only backported to * those perl versions that support it. For older perl * versions, the implementation will fall back to bytes. */ #ifndef pv_escape #if defined(NEED_pv_escape) static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); static #else extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); #endif #ifdef pv_escape # undef pv_escape #endif #define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f) #define Perl_pv_escape DPPP_(my_pv_escape) #if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL) char * DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags) { const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\'; const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc; char octbuf[32] = "%123456789ABCDF"; STRLEN wrote = 0; STRLEN chsize = 0; STRLEN readsize = 1; #if defined(is_utf8_string) && defined(utf8_to_uvchr) bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0; #endif const char *pv = str; const char * const end = pv + count; octbuf[0] = esc; if (!(flags & PERL_PV_ESCAPE_NOCLEAR)) sv_setpvs(dsv, ""); #if defined(is_utf8_string) && defined(utf8_to_uvchr) if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count)) isuni = 1; #endif for (; pv < end && (!max || wrote < max) ; pv += readsize) { const UV u = #if defined(is_utf8_string) && defined(utf8_to_uvchr) isuni ? utf8_to_uvchr((U8*)pv, &readsize) : #endif (U8)*pv; const U8 c = (U8)u & 0xFF; if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) { if (flags & PERL_PV_ESCAPE_FIRSTCHAR) chsize = my_snprintf(octbuf, sizeof octbuf, "%"UVxf, u); else chsize = my_snprintf(octbuf, sizeof octbuf, "%cx{%"UVxf"}", esc, u); } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) { chsize = 1; } else { if (c == dq || c == esc || !isPRINT(c)) { chsize = 2; switch (c) { case '\\' : /* fallthrough */ case '%' : if (c == esc) octbuf[1] = esc; else chsize = 1; break; case '\v' : octbuf[1] = 'v'; break; case '\t' : octbuf[1] = 't'; break; case '\r' : octbuf[1] = 'r'; break; case '\n' : octbuf[1] = 'n'; break; case '\f' : octbuf[1] = 'f'; break; case '"' : if (dq == '"') octbuf[1] = '"'; else chsize = 1; break; default: chsize = my_snprintf(octbuf, sizeof octbuf, pv < end && isDIGIT((U8)*(pv+readsize)) ? "%c%03o" : "%c%o", esc, c); } } else { chsize = 1; } } if (max && wrote + chsize > max) { break; } else if (chsize > 1) { sv_catpvn(dsv, octbuf, chsize); wrote += chsize; } else { char tmp[2]; my_snprintf(tmp, sizeof tmp, "%c", c); sv_catpvn(dsv, tmp, 1); wrote++; } if (flags & PERL_PV_ESCAPE_FIRSTCHAR) break; } if (escaped != NULL) *escaped= pv - str; return SvPVX(dsv); } #endif #endif #ifndef pv_pretty #if defined(NEED_pv_pretty) static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); static #else extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); #endif #ifdef pv_pretty # undef pv_pretty #endif #define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g) #define Perl_pv_pretty DPPP_(my_pv_pretty) #if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL) char * DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags) { const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%'; STRLEN escaped; if (!(flags & PERL_PV_PRETTY_NOCLEAR)) sv_setpvs(dsv, ""); if (dq == '"') sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, "<"); if (start_color != NULL) sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color)); pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR); if (end_color != NULL) sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color)); if (dq == '"') sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, ">"); if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count) sv_catpvs(dsv, "..."); return SvPVX(dsv); } #endif #endif #ifndef pv_display #if defined(NEED_pv_display) static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); static #else extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); #endif #ifdef pv_display # undef pv_display #endif #define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e) #define Perl_pv_display DPPP_(my_pv_display) #if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL) char * DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim) { pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP); if (len > cur && pv[cur] == '\0') sv_catpvs(dsv, "\\0"); return SvPVX(dsv); } #endif #endif #endif /* _P_P_PORTABILITY_H_ */ /* End of File ppport.h */ voronoi2perl.h000444000765000024 2771512161110604 17776 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src#ifndef bgu_voronoi2perl_h_ #define bgu_voronoi2perl_h_ #include #include #include using namespace boost::polygon; typedef medial_axis VD; typedef segment_data bp_segment; static const unsigned int EXTERNAL_COLOR = (unsigned int) 1; static const unsigned int IS_LEAF = (unsigned int) 2; static const unsigned int AT_JUNCTION = (unsigned int) 4; static const unsigned int PROCESSED = (unsigned int) 8; typedef double CT; typedef double AT; double pi = 4 * atan2(1, 1); void rotate_2d(double &x, double &y, const double theta, const double xo = 0, const double yo = 0) { double xp; x -= xo; y -= yo; xp = (x * cos(theta) - y * sin(theta)) + xo; y = (y * cos(theta) + x * sin(theta)) + yo; x = xp; } template void reflect_point_about_line(CT &x, CT &y, const CT x0, const CT y0, const CT x1, const CT y1) { double dy = (double) (y1 - y0); double dx = (double) (x1 - x0); if (dy == 0 && dx == 0) {return;} double theta = atan2(dy, dx); rotate_2d(x, y, -theta, x0, y0); y -= y0; y *= -1.0; y += y0; rotate_2d(x, y, theta, x0, y0); } SV* medial_axis2perl(const VD &vd, const bool internal_only = true) { std::size_t num_edges = 0; if (internal_only) { for (VD::const_edge_iterator it = vd.edges().begin(); it != vd.edges().end(); ++it) { if (!(it->color() & EXTERNAL_COLOR)) { ++num_edges; } } } else { num_edges = vd.num_edges(); } AV* edges_out = newAV(); av_extend(edges_out, num_edges - 1); AV* vertices_out = newAV(); av_extend(vertices_out, vd.num_vertices() - 1); // lookup tables used in recreating the medial axis data structure for perl std::map thisToThis; std::map thisToTwin; std::map thisToNext; std::map thisToPrev; std::map vertToAV; std::size_t count = 0; const VD::edge_type* start_edge = NULL; for (VD::const_edge_iterator it = vd.edges().begin(); it != vd.edges().end(); ++it) { // Get the primary edge corresponding to the first input // segment, which should be the first segment of the outer contour // of a polygon with holes. if (!(it->color() & EXTERNAL_COLOR) && it->cell()->source_index() == 0 && it->is_primary()) { start_edge = &(*it); break; } } while (start_edge != NULL) { const VD::edge_type* it = start_edge; do { // For all primary edges, calculate: // theta = direction of the edge // phi = direction to polygon edge, as deflection from theta // (although in practice that may not be the most practical // so might change that to just the plain angle, or vector...) // // TODO: also need some kind of parabola parameter for the curved edges // which replaces all the non-primary edges related to curved edges. // A convenient parameter for display is just the quadratic bezier // control point, which occures at the intersection of the tangent lines // at the two ends of the curved edge - easy to feed that to SVG path. // It's not clear it that's the best parameterization for working out // sampled toolpaths though. double theta = 0; double phi = 0; if (it->is_primary() && it->is_finite() && (!internal_only || !(it->color() & EXTERNAL_COLOR)) ) { // calculate theta if (it->is_curved()) { theta = atan2( -(it->foot()->x() - it->vertex0()->x()) + (it->twin()->next()->foot()->x() - it->vertex0()->x()) , (it->foot()->y() - it->vertex0()->y()) - (it->twin()->next()->foot()->y() - it->vertex0()->y()) ); } else { theta = atan2((double) it->vertex1()->y() - it->vertex0()->y(), (double) it->vertex1()->x() - it->vertex0()->x()); } // calculate phi double tdx = (double) it->foot()->x() - it->vertex0()->x(); double tdy = (double) it->foot()->y() - it->vertex0()->y(); if (it->prev() == it->twin()) { tdx = (double) it->next()->foot()->x() - it->next()->vertex0()->x(); tdy = (double) it->next()->foot()->y() - it->next()->vertex0()->y(); } if (tdx == 0 && tdy == 0) {phi = theta;} else {phi = atan2(tdy, tdx) - theta;} while (phi > pi) {phi-=2*pi;} while (phi < -pi) {phi+=2*pi;} } // load up perl data if (!(it->color() & PROCESSED) && it->is_primary() && !(it->color() & EXTERNAL_COLOR) ) { std::size_t ec1 = it->color(); it->color(ec1 | PROCESSED); // Make the edge AV AV* edgeav = newAV(); av_store(edges_out, count++, newRV_noinc((SV*) edgeav)); // Process each vertex just once, the first time we see it. // Each vertex gets one edge reference - // doesn't matter which, so the first. // Ray edges have NULL vertices, so always check for that. if (it->vertex0() && !(it->vertex0()->color() & PROCESSED)) { if (it->vertex0()) { std::size_t vc1 = it->vertex0()->color(); it->vertex0()->color(vc1 | PROCESSED); AV* pointav = newAV(); vertToAV[it->vertex0()] = pointav; av_push(vertices_out, newRV_noinc((SV*) pointav)); av_fill(pointav, 3); av_store_point_xy(pointav, it->vertex0()->x(), it->vertex0()->y()); av_store(pointav, 2, newSVnv(it->vertex0()->r())); av_store(pointav, 3, newRV_inc((SV*) edgeav)); } } // fill in edge data av_fill(edgeav, 10); // cell ref - index corresponding to original segment input av_store(edgeav, 0, newSVuv(it->cell()->source_index())); // start vertex ref (rays coming in from infinity don't have one) if (it->vertex0()) { if (vertToAV[it->vertex0()]) { av_store(edgeav, 1, newRV_inc((SV*) vertToAV[it->vertex0()])); } } // indeces 2, 3 and 4 are for twin, next and prev edges, // to be filled in later // edge direction av_store(edgeav, 5, newSVnv(theta)); // radius direction to source segment, as rotation from edge direction av_store(edgeav, 6, newSVnv(phi)); // is it a parabolic curve? av_store(edgeav, 7, newSViv( it->is_curved() ? 1 : 0)); // is it primary? av_store(edgeav, 8, newSViv( it->is_primary() ? 1 : 0)); // is it internal? int intr1 = ( it->color() - PROCESSED > 0) ? 0 : 1; av_store(edgeav, 9, newSViv(intr1)); // an edge's start vertex, with it's radius, and the edge's angle phi // are enough to calculate the foot. So including the foot in the data // structure is redundant. But until we see what's most practical in // use, we'll include the foot too. Besides, it helps with dev and debug // visualizations. if (it->foot()) { AV* footav = newAV(); av_fill(footav, 1); av_store_point_xy(footav, it->foot()->x(), it->foot()->y()); av_store(edgeav, 10, newRV_inc((SV*) footav)); } // fill in the lookup tables to finish off the data structure in a // second pass through the edge list, after this loop is done thisToThis[it] = edgeav; thisToTwin[it->twin()] = edgeav; thisToNext[it->prev()] = edgeav; thisToPrev[it->next()] = edgeav; } it = it->next(); } while (it != start_edge); // If there are multiple loops, find a start edge for the next one. start_edge = NULL; for (VD::const_edge_iterator it = vd.edges().begin(); it != vd.edges().end(); ++it) { if ( !(it->color() & PROCESSED) && it->is_primary() && !(it->color() & EXTERNAL_COLOR) ) { start_edge = &(*it); break; } } } // fill in all the edge-to-edge references from the lookup tables for (VD::const_edge_iterator it = vd.edges().begin(); it != vd.edges().end(); ++it) { if (it->is_primary() && !(it->color() & EXTERNAL_COLOR)) { const VD::edge_type* ep = &(*it); AV* edgeav = thisToThis[ep]; AV* edgeavtwin = thisToTwin[ep]; AV* edgeavnext = thisToNext[ep]; AV* edgeavprev = thisToPrev[ep]; /* debug notices */ /* Line commented because they fail to compile under Windows with the following error: src/voronoi2perl.h:242:76: error: cast from 'const edge_type* {aka const boost:: polygon::medial_axis_edge*}' to 'long unsigned int' loses precision [-fp ermissive] if (!edgeav ) {printf("av not def. ep: %lu\n",(unsigned long) ep);} if (!edgeavtwin) {printf("avtwin not def. ep: %lu\n",(unsigned long) ep);} if (!edgeavprev) {printf("avprev not def. ep: %lu\n",(unsigned long) ep);} if (!edgeavnext) {printf("avnext not def. ep: %lu\n",(unsigned long) ep);} */ if (edgeavtwin != NULL) { av_store(edgeav, 2, newRV_inc((SV*) edgeavtwin)); } if (edgeavnext != NULL) { av_store(edgeav, 3, newRV_inc((SV*) edgeavnext)); } if (edgeavprev != NULL) { av_store(edgeav, 4, newRV_inc((SV*) edgeavprev)); } } } // Debug report if (0) { printf("\n\nfiltered edges\n"); printf("srcInd isInf curved color this twin next prev point\n"); for (VD::const_edge_iterator it = vd.edges().begin(); it != vd.edges().end(); ++it) { if (1 //&& it->is_primary() //&& it->vertex0() && it->vertex1() //&& it->is_finite() //&& !(it->color() & EXTERNAL_COLOR) ) { printf("%3ld %5s %7s %2ld%1s ", it->cell()->source_index(), (it->is_finite() ? " ":" INF "), (it->is_curved() ? " curve ":" line "), it->color(), (it->is_primary() ? "p" : "s") ); printf("%llu, %llu , %llu, %llu ", (unsigned long long int) &(*it), (unsigned long long int) it->twin(), (unsigned long long int) it->next(), (unsigned long long int) it->prev() ); if (it->vertex0()) {printf("[%f , %f , %f]",it->vertex0()->x(),it->vertex0()->y(),it->vertex0()->r());} else {printf("no vert0");} printf("\n"); } } } HV * result = newHV(); (void)hv_store(result, "edges", strlen("edges"), newRV_noinc((SV*) edges_out), 0); (void)hv_store(result, "vertices", strlen("vertices"), newRV_noinc((SV*) vertices_out), 0); (void)hv_store(result, "events", strlen("events"), newSVpv(vd.event_log().c_str(), 0), 0); return newRV_noinc((SV*) result); } template void builder_segments_from_ring(const RingLike &my_ring, VBT & vb) { BOOST_AUTO(it, boost::begin(my_ring)); BOOST_AUTO(end, boost::end(my_ring)); BOOST_AUTO(previous, it); for (it++; it != end; ++previous, ++it) { const bp_segment s( bp_point_xy(previous->template get<0>(),previous->template get<1>()), bp_point_xy(it->template get<0>(), it->template get<1>()) ); boost::polygon::insert( s, &vb ); } // If ring wasn't closed, add one more closing segment if (boost::size(my_ring) > 2) { if (boost::geometry::disjoint(*boost::begin(my_ring), *(boost::end(my_ring) - 1))) { const bp_segment s( bp_point_xy((end - 1)->template get<0>(),(end - 1)->template get<1>()), bp_point_xy(my_ring.begin()->template get<0>(), my_ring.begin()->template get<1>()) ); boost::polygon::insert( s, &vb ); } } } #endif boost000755000765000024 012161110702 16121 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/srcaligned_storage.hpp000444000765000024 1057612161110700 22145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost//----------------------------------------------------------------------------- // 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 any.hpp000444000765000024 1514612161110611 17604 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 array.hpp000444000765000024 3754212161110656 20150 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/* The following code declares class array, * an STL container (as wrapper) for arrays of constant size. * * See * http://www.boost.org/libs/array/ * for documentation. * * The original author site is at: http://www.josuttis.com/ * * (C) Copyright Nicolai M. Josuttis 2001. * * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * 14 Apr 2012 - (mtc) Added support for boost::hash * 28 Dec 2010 - (mtc) Added cbegin and cend (and crbegin and crend) for C++Ox compatibility. * 10 Mar 2010 - (mtc) fill method added, matching resolution of the standard library working group. * See or Trac issue #3168 * Eventually, we should remove "assign" which is now a synonym for "fill" (Marshall Clow) * 10 Mar 2010 - added workaround for SUNCC and !STLPort [trac #3893] (Marshall Clow) * 29 Jan 2004 - c_array() added, BOOST_NO_PRIVATE_IN_AGGREGATE removed (Nico Josuttis) * 23 Aug 2002 - fix for Non-MSVC compilers combined with MSVC libraries. * 05 Aug 2001 - minor update (Nico Josuttis) * 20 Jan 2001 - STLport fix (Beman Dawes) * 29 Sep 2000 - Initial Revision (Nico Josuttis) * * Jan 29, 2004 */ #ifndef BOOST_ARRAY_HPP #define BOOST_ARRAY_HPP #include #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) # pragma warning(push) # pragma warning(disable:4996) // 'std::equal': Function call with parameters that may be unsafe # pragma warning(disable:4510) // boost::array' : default constructor could not be generated # pragma warning(disable:4610) // warning C4610: class 'boost::array' can never be instantiated - user defined constructor required #endif #include #include #include #include // Handles broken standard libraries better than #include #include #include #include // FIXES for broken compilers #include namespace boost { template class array { public: T elems[N]; // fixed-size array of elements of type T public: // type definitions typedef T value_type; typedef T* iterator; typedef const T* const_iterator; typedef T& reference; typedef const T& const_reference; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; // iterator support iterator begin() { return elems; } const_iterator begin() const { return elems; } const_iterator cbegin() const { return elems; } iterator end() { return elems+N; } const_iterator end() const { return elems+N; } const_iterator cend() const { return elems+N; } // reverse iterator support #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; #elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310) // workaround for broken reverse_iterator in VC7 typedef std::reverse_iterator > reverse_iterator; typedef std::reverse_iterator > const_reverse_iterator; #elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; #else // workaround for broken reverse_iterator implementations typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; #endif reverse_iterator rbegin() { return reverse_iterator(end()); } const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); } reverse_iterator rend() { return reverse_iterator(begin()); } const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } const_reverse_iterator crend() const { return const_reverse_iterator(begin()); } // operator[] reference operator[](size_type i) { BOOST_ASSERT_MSG( i < N, "out of range" ); return elems[i]; } const_reference operator[](size_type i) const { BOOST_ASSERT_MSG( i < N, "out of range" ); return elems[i]; } // at() with range check reference at(size_type i) { rangecheck(i); return elems[i]; } const_reference at(size_type i) const { rangecheck(i); return elems[i]; } // front() and back() reference front() { return elems[0]; } const_reference front() const { return elems[0]; } reference back() { return elems[N-1]; } const_reference back() const { return elems[N-1]; } // size is constant static size_type size() { return N; } static bool empty() { return false; } static size_type max_size() { return N; } enum { static_size = N }; // swap (note: linear complexity) void swap (array& y) { for (size_type i = 0; i < N; ++i) boost::swap(elems[i],y.elems[i]); } // direct access to data (read-only) const T* data() const { return elems; } T* data() { return elems; } // use array as C array (direct read/write access to data) T* c_array() { return elems; } // assignment with type conversion template array& operator= (const array& rhs) { std::copy(rhs.begin(),rhs.end(), begin()); return *this; } // assign one value to all elements void assign (const T& value) { fill ( value ); } // A synonym for fill void fill (const T& value) { std::fill_n(begin(),size(),value); } // check range (may be private because it is static) static void rangecheck (size_type i) { if (i >= size()) { std::out_of_range e("array<>: index out of range"); boost::throw_exception(e); } } }; #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) template< class T > class array< T, 0 > { public: // type definitions typedef T value_type; typedef T* iterator; typedef const T* const_iterator; typedef T& reference; typedef const T& const_reference; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; // iterator support iterator begin() { return iterator( reinterpret_cast< T * >( this ) ); } const_iterator begin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); } const_iterator cbegin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); } iterator end() { return begin(); } const_iterator end() const { return begin(); } const_iterator cend() const { return cbegin(); } // reverse iterator support #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; #elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310) // workaround for broken reverse_iterator in VC7 typedef std::reverse_iterator > reverse_iterator; typedef std::reverse_iterator > const_reverse_iterator; #elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; #else // workaround for broken reverse_iterator implementations typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; #endif reverse_iterator rbegin() { return reverse_iterator(end()); } const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); } reverse_iterator rend() { return reverse_iterator(begin()); } const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } const_reverse_iterator crend() const { return const_reverse_iterator(begin()); } // operator[] reference operator[](size_type /*i*/) { return failed_rangecheck(); } const_reference operator[](size_type /*i*/) const { return failed_rangecheck(); } // at() with range check reference at(size_type /*i*/) { return failed_rangecheck(); } const_reference at(size_type /*i*/) const { return failed_rangecheck(); } // front() and back() reference front() { return failed_rangecheck(); } const_reference front() const { return failed_rangecheck(); } reference back() { return failed_rangecheck(); } const_reference back() const { return failed_rangecheck(); } // size is constant static size_type size() { return 0; } static bool empty() { return true; } static size_type max_size() { return 0; } enum { static_size = 0 }; void swap (array& /*y*/) { } // direct access to data (read-only) const T* data() const { return 0; } T* data() { return 0; } // use array as C array (direct read/write access to data) T* c_array() { return 0; } // assignment with type conversion template array& operator= (const array& ) { return *this; } // assign one value to all elements void assign (const T& value) { fill ( value ); } void fill (const T& ) {} // check range (may be private because it is static) static reference failed_rangecheck () { std::out_of_range e("attempt to access element of an empty array"); boost::throw_exception(e); #if defined(BOOST_NO_EXCEPTIONS) || (!defined(BOOST_MSVC) && !defined(__PATHSCALE__)) // // We need to return something here to keep // some compilers happy: however we will never // actually get here.... // static T placeholder; return placeholder; #endif } }; #endif // comparisons template bool operator== (const array& x, const array& y) { return std::equal(x.begin(), x.end(), y.begin()); } template bool operator< (const array& x, const array& y) { return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end()); } template bool operator!= (const array& x, const array& y) { return !(x==y); } template bool operator> (const array& x, const array& y) { return y bool operator<= (const array& x, const array& y) { return !(y bool operator>= (const array& x, const array& y) { return !(x inline void swap (array& x, array& y) { x.swap(y); } #if defined(__SUNPRO_CC) // Trac ticket #4757; the Sun Solaris compiler can't handle // syntax like 'T(&get_c_array(boost::array& arg))[N]' // // We can't just use this for all compilers, because the // borland compilers can't handle this form. namespace detail { template struct c_array { typedef T type[N]; }; } // Specific for boost::array: simply returns its elems data member. template typename detail::c_array::type& get_c_array(boost::array& arg) { return arg.elems; } // Specific for boost::array: simply returns its elems data member. template typename const detail::c_array::type& get_c_array(const boost::array& arg) { return arg.elems; } #else // Specific for boost::array: simply returns its elems data member. template T(&get_c_array(boost::array& arg))[N] { return arg.elems; } // Const version. template const T(&get_c_array(const boost::array& arg))[N] { return arg.elems; } #endif #if 0 // Overload for std::array, assuming that std::array will have // explicit conversion functions as discussed at the WG21 meeting // in Summit, March 2009. template T(&get_c_array(std::array& arg))[N] { return static_cast(arg); } // Const version. template const T(&get_c_array(const std::array& arg))[N] { return static_cast(arg); } #endif template std::size_t hash_value(const array& arr) { return boost::hash_range(arr.begin(), arr.end()); } } /* namespace boost */ #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) # pragma warning(pop) #endif #endif /*BOOST_ARRAY_HPP*/ assert.hpp000444000765000024 1023312161110644 20314 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// // 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 assign.hpp000444000765000024 117612161110665 20270 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_HPP #define BOOST_ASSIGN_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include #include #endif bind.hpp000444000765000024 113512161110652 17707 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 blank.hpp000444000765000024 400412161110601 20052 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost//----------------------------------------------------------------------------- // boost blank.hpp header file // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // // Copyright (c) 2003 // Eric Friedman // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_BLANK_HPP #define BOOST_BLANK_HPP #include "boost/blank_fwd.hpp" #if !defined(BOOST_NO_IOSTREAM) #include // for std::basic_ostream forward declare #include "boost/detail/templated_streams.hpp" #endif // BOOST_NO_IOSTREAM #include "boost/mpl/bool.hpp" #include "boost/type_traits/is_empty.hpp" #include "boost/type_traits/is_pod.hpp" #include "boost/type_traits/is_stateless.hpp" namespace boost { struct blank { }; // type traits specializations // template <> struct is_pod< blank > : mpl::true_ { }; template <> struct is_empty< blank > : mpl::true_ { }; template <> struct is_stateless< blank > : mpl::true_ { }; // relational operators // inline bool operator==(const blank&, const blank&) { return true; } inline bool operator<=(const blank&, const blank&) { return true; } inline bool operator>=(const blank&, const blank&) { return true; } inline bool operator!=(const blank&, const blank&) { return false; } inline bool operator<(const blank&, const blank&) { return false; } inline bool operator>(const blank&, const blank&) { return false; } // streaming support // #if !defined(BOOST_NO_IOSTREAM) BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<( BOOST_TEMPLATED_STREAM(ostream, E,T)& out , const blank& ) { // (output nothing) return out; } #endif // BOOST_NO_IOSTREAM } // namespace boost #endif // BOOST_BLANK_HPP blank_fwd.hpp000444000765000024 120012161110702 20707 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost//----------------------------------------------------------------------------- // boost blank_fwd.hpp header file // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // // Copyright (c) 2003 // Eric Friedman // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_BLANK_FWD_HPP #define BOOST_BLANK_FWD_HPP namespace boost { struct blank; } // namespace boost #endif // BOOST_BLANK_FWD_HPP call_traits.hpp000444000765000024 143512161110617 21300 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// (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 cast.hpp000444000765000024 1072212161110652 17747 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// boost cast.hpp header file ----------------------------------------------// // (C) Copyright Kevlin Henney and Dave Abrahams 1999. // Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/conversion for Documentation. // Revision History // 23 JUn 05 numeric_cast removed and redirected to the new verion (Fernando Cacciola) // 02 Apr 01 Removed BOOST_NO_LIMITS workarounds and included // instead (the workaround did not // actually compile when BOOST_NO_LIMITS was defined in // any case, so we loose nothing). (John Maddock) // 21 Jan 01 Undid a bug I introduced yesterday. numeric_cast<> never // worked with stock GCC; trying to get it to do that broke // vc-stlport. // 20 Jan 01 Moved BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS to config.hpp. // Removed unused BOOST_EXPLICIT_TARGET macro. Moved // boost::detail::type to boost/type.hpp. Made it compile with // stock gcc again (Dave Abrahams) // 29 Nov 00 Remove nested namespace cast, cleanup spacing before Formal // Review (Beman Dawes) // 19 Oct 00 Fix numeric_cast for floating-point types (Dave Abrahams) // 15 Jul 00 Suppress numeric_cast warnings for GCC, Borland and MSVC // (Dave Abrahams) // 30 Jun 00 More MSVC6 wordarounds. See comments below. (Dave Abrahams) // 28 Jun 00 Removed implicit_cast<>. See comment below. (Beman Dawes) // 27 Jun 00 More MSVC6 workarounds // 15 Jun 00 Add workarounds for MSVC6 // 2 Feb 00 Remove bad_numeric_cast ";" syntax error (Doncho Angelov) // 26 Jan 00 Add missing throw() to bad_numeric_cast::what(0 (Adam Levar) // 29 Dec 99 Change using declarations so usages in other namespaces work // correctly (Dave Abrahams) // 23 Sep 99 Change polymorphic_downcast assert to also detect M.I. errors // as suggested Darin Adler and improved by Valentin Bonnard. // 2 Sep 99 Remove controversial asserts, simplify, rename. // 30 Aug 99 Move to cast.hpp, replace value_cast with numeric_cast, // place in nested namespace. // 3 Aug 99 Initial version #ifndef BOOST_CAST_HPP #define BOOST_CAST_HPP # include # 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? # if defined(BOOST_MSVC) && BOOST_MSVC < 1300 # define BOOST_EXPLICIT_DEFAULT_TARGET , ::boost::type* = 0 # else # define BOOST_EXPLICIT_DEFAULT_TARGET # endif namespace boost { // See the documentation for descriptions of how to choose between // static_cast<>, dynamic_cast<>, polymorphic_cast<> and polymorphic_downcast<> // polymorphic_cast --------------------------------------------------------// // Runtime checked polymorphic downcasts and crosscasts. // Suggested in The C++ Programming Language, 3rd Ed, Bjarne Stroustrup, // section 15.8 exercise 1, page 425. template inline Target polymorphic_cast(Source* x BOOST_EXPLICIT_DEFAULT_TARGET) { Target tmp = dynamic_cast(x); if ( tmp == 0 ) throw std::bad_cast(); return tmp; } // polymorphic_downcast ----------------------------------------------------// // BOOST_ASSERT() checked polymorphic downcast. Crosscasts prohibited. // WARNING: Because this cast uses BOOST_ASSERT(), it violates // the One Definition Rule if used in multiple translation units // where BOOST_DISABLE_ASSERTS, BOOST_ENABLE_ASSERT_HANDLER // NDEBUG are defined inconsistently. // Contributed by Dave Abrahams template inline Target polymorphic_downcast(Source* x BOOST_EXPLICIT_DEFAULT_TARGET) { BOOST_ASSERT( dynamic_cast(x) == x ); // detect logic error return static_cast(x); } # undef BOOST_EXPLICIT_DEFAULT_TARGET } // namespace boost # include #endif // BOOST_CAST_HPP checked_delete.hpp000444000765000024 317212161110672 21710 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 compressed_pair.hpp000444000765000024 147112161110614 22153 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. // Use, modification and distribution are subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt). // // See http://www.boost.org/libs/utility for most recent version including documentation. // See boost/detail/compressed_pair.hpp and boost/detail/ob_compressed_pair.hpp // for full copyright notices. #ifndef BOOST_COMPRESSED_PAIR_HPP #define BOOST_COMPRESSED_PAIR_HPP #ifndef BOOST_CONFIG_HPP #include #endif #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #include #else #include #endif #endif // BOOST_COMPRESSED_PAIR_HPP concept_archetype.hpp000444000765000024 5742412161110610 22520 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// // (C) Copyright Jeremy Siek 2000. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // Revision History: // // 17 July 2001: Added const to some member functions. (Jeremy Siek) // 05 May 2001: Removed static dummy_cons object. (Jeremy Siek) // See http://www.boost.org/libs/concept_check for documentation. #ifndef BOOST_CONCEPT_ARCHETYPES_HPP #define BOOST_CONCEPT_ARCHETYPES_HPP #include #include #include #include namespace boost { //=========================================================================== // Basic Archetype Classes namespace detail { class dummy_constructor { }; } // A type that models no concept. The template parameter // is only there so that null_archetype types can be created // that have different type. template class null_archetype { private: null_archetype() { } null_archetype(const null_archetype&) { } null_archetype& operator=(const null_archetype&) { return *this; } public: null_archetype(detail::dummy_constructor) { } #ifndef __MWERKS__ template friend void dummy_friend(); // just to avoid warnings #endif }; // This is a helper class that provides a way to get a reference to // an object. The get() function will never be called at run-time // (nothing in this file will) so this seemingly very bad function // is really quite innocent. The name of this class needs to be // changed. template class static_object { public: static T& get() { #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) return *reinterpret_cast(0); #else static char d[sizeof(T)]; return *reinterpret_cast(d); #endif } }; template > class default_constructible_archetype : public Base { public: default_constructible_archetype() : Base(static_object::get()) { } default_constructible_archetype(detail::dummy_constructor x) : Base(x) { } }; template > class assignable_archetype : public Base { assignable_archetype() { } assignable_archetype(const assignable_archetype&) { } public: assignable_archetype& operator=(const assignable_archetype&) { return *this; } assignable_archetype(detail::dummy_constructor x) : Base(x) { } }; template > class copy_constructible_archetype : public Base { public: copy_constructible_archetype() : Base(static_object::get()) { } copy_constructible_archetype(const copy_constructible_archetype&) : Base(static_object::get()) { } copy_constructible_archetype(detail::dummy_constructor x) : Base(x) { } }; template > class sgi_assignable_archetype : public Base { public: sgi_assignable_archetype(const sgi_assignable_archetype&) : Base(static_object::get()) { } sgi_assignable_archetype& operator=(const sgi_assignable_archetype&) { return *this; } sgi_assignable_archetype(const detail::dummy_constructor& x) : Base(x) { } }; struct default_archetype_base { default_archetype_base(detail::dummy_constructor) { } }; // Careful, don't use same type for T and Base. That results in the // conversion operator being invalid. Since T is often // null_archetype, can't use null_archetype for Base. template class convertible_to_archetype : public Base { private: convertible_to_archetype() { } convertible_to_archetype(const convertible_to_archetype& ) { } convertible_to_archetype& operator=(const convertible_to_archetype&) { return *this; } public: convertible_to_archetype(detail::dummy_constructor x) : Base(x) { } operator const T&() const { return static_object::get(); } }; template class convertible_from_archetype : public Base { private: convertible_from_archetype() { } convertible_from_archetype(const convertible_from_archetype& ) { } convertible_from_archetype& operator=(const convertible_from_archetype&) { return *this; } public: convertible_from_archetype(detail::dummy_constructor x) : Base(x) { } convertible_from_archetype(const T&) { } convertible_from_archetype& operator=(const T&) { return *this; } }; class boolean_archetype { public: boolean_archetype(const boolean_archetype&) { } operator bool() const { return true; } boolean_archetype(detail::dummy_constructor) { } private: boolean_archetype() { } boolean_archetype& operator=(const boolean_archetype&) { return *this; } }; template > class equality_comparable_archetype : public Base { public: equality_comparable_archetype(detail::dummy_constructor x) : Base(x) { } }; template boolean_archetype operator==(const equality_comparable_archetype&, const equality_comparable_archetype&) { return boolean_archetype(static_object::get()); } template boolean_archetype operator!=(const equality_comparable_archetype&, const equality_comparable_archetype&) { return boolean_archetype(static_object::get()); } template > class equality_comparable2_first_archetype : public Base { public: equality_comparable2_first_archetype(detail::dummy_constructor x) : Base(x) { } }; template > class equality_comparable2_second_archetype : public Base { public: equality_comparable2_second_archetype(detail::dummy_constructor x) : Base(x) { } }; template boolean_archetype operator==(const equality_comparable2_first_archetype&, const equality_comparable2_second_archetype&) { return boolean_archetype(static_object::get()); } template boolean_archetype operator!=(const equality_comparable2_first_archetype&, const equality_comparable2_second_archetype&) { return boolean_archetype(static_object::get()); } template > class less_than_comparable_archetype : public Base { public: less_than_comparable_archetype(detail::dummy_constructor x) : Base(x) { } }; template boolean_archetype operator<(const less_than_comparable_archetype&, const less_than_comparable_archetype&) { return boolean_archetype(static_object::get()); } template > class comparable_archetype : public Base { public: comparable_archetype(detail::dummy_constructor x) : Base(x) { } }; template boolean_archetype operator<(const comparable_archetype&, const comparable_archetype&) { return boolean_archetype(static_object::get()); } template boolean_archetype operator<=(const comparable_archetype&, const comparable_archetype&) { return boolean_archetype(static_object::get()); } template boolean_archetype operator>(const comparable_archetype&, const comparable_archetype&) { return boolean_archetype(static_object::get()); } template boolean_archetype operator>=(const comparable_archetype&, const comparable_archetype&) { return boolean_archetype(static_object::get()); } // The purpose of the optags is so that one can specify // exactly which types the operator< is defined between. // This is useful for allowing the operations: // // A a; B b; // a < b // b < a // // without also allowing the combinations: // // a < a // b < b // struct optag1 { }; struct optag2 { }; struct optag3 { }; #define BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(OP, NAME) \ template , class Tag = optag1 > \ class NAME##_first_archetype : public Base { \ public: \ NAME##_first_archetype(detail::dummy_constructor x) : Base(x) { } \ }; \ \ template , class Tag = optag1 > \ class NAME##_second_archetype : public Base { \ public: \ NAME##_second_archetype(detail::dummy_constructor x) : Base(x) { } \ }; \ \ template \ boolean_archetype \ operator OP (const NAME##_first_archetype&, \ const NAME##_second_archetype&) \ { \ return boolean_archetype(static_object::get()); \ } BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(==, equal_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(!=, not_equal_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(<, less_than_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(<=, less_equal_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(>, greater_than_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(>=, greater_equal_op) #define BOOST_DEFINE_OPERATOR_ARCHETYPE(OP, NAME) \ template > \ class NAME##_archetype : public Base { \ public: \ NAME##_archetype(detail::dummy_constructor x) : Base(x) { } \ NAME##_archetype(const NAME##_archetype&) \ : Base(static_object::get()) { } \ NAME##_archetype& operator=(const NAME##_archetype&) { return *this; } \ }; \ template \ NAME##_archetype \ operator OP (const NAME##_archetype&,\ const NAME##_archetype&) \ { \ return \ NAME##_archetype(static_object::get()); \ } BOOST_DEFINE_OPERATOR_ARCHETYPE(+, addable) BOOST_DEFINE_OPERATOR_ARCHETYPE(-, subtractable) BOOST_DEFINE_OPERATOR_ARCHETYPE(*, multipliable) BOOST_DEFINE_OPERATOR_ARCHETYPE(/, dividable) BOOST_DEFINE_OPERATOR_ARCHETYPE(%, modable) // As is, these are useless because of the return type. // Need to invent a better way... #define BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(OP, NAME) \ template > \ class NAME##_first_archetype : public Base { \ public: \ NAME##_first_archetype(detail::dummy_constructor x) : Base(x) { } \ }; \ \ template > \ class NAME##_second_archetype : public Base { \ public: \ NAME##_second_archetype(detail::dummy_constructor x) : Base(x) { } \ }; \ \ template \ Return \ operator OP (const NAME##_first_archetype&, \ const NAME##_second_archetype&) \ { \ return Return(static_object::get()); \ } BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(+, plus_op) BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(*, time_op) BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(/, divide_op) BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(-, subtract_op) BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(%, mod_op) //=========================================================================== // Function Object Archetype Classes template class generator_archetype { public: const Return& operator()() { return static_object::get(); } }; class void_generator_archetype { public: void operator()() { } }; template class unary_function_archetype { private: unary_function_archetype() { } public: unary_function_archetype(detail::dummy_constructor) { } const Return& operator()(const Arg&) const { return static_object::get(); } }; template class binary_function_archetype { private: binary_function_archetype() { } public: binary_function_archetype(detail::dummy_constructor) { } const Return& operator()(const Arg1&, const Arg2&) const { return static_object::get(); } }; template class unary_predicate_archetype { typedef boolean_archetype Return; unary_predicate_archetype() { } public: unary_predicate_archetype(detail::dummy_constructor) { } const Return& operator()(const Arg&) const { return static_object::get(); } }; template > class binary_predicate_archetype { typedef boolean_archetype Return; binary_predicate_archetype() { } public: binary_predicate_archetype(detail::dummy_constructor) { } const Return& operator()(const Arg1&, const Arg2&) const { return static_object::get(); } }; //=========================================================================== // Iterator Archetype Classes template class input_iterator_archetype { private: typedef input_iterator_archetype self; public: typedef std::input_iterator_tag iterator_category; typedef T value_type; struct reference { operator const value_type&() const { return static_object::get(); } }; typedef const T* pointer; typedef std::ptrdiff_t difference_type; self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return reference(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template class input_iterator_archetype_no_proxy { private: typedef input_iterator_archetype_no_proxy self; public: typedef std::input_iterator_tag iterator_category; typedef T value_type; typedef const T& reference; typedef const T* pointer; typedef std::ptrdiff_t difference_type; self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template struct output_proxy { output_proxy& operator=(const T&) { return *this; } }; template class output_iterator_archetype { public: typedef output_iterator_archetype self; public: typedef std::output_iterator_tag iterator_category; typedef output_proxy value_type; typedef output_proxy reference; typedef void pointer; typedef void difference_type; output_iterator_archetype(detail::dummy_constructor) { } output_iterator_archetype(const self&) { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return output_proxy(); } self& operator++() { return *this; } self operator++(int) { return *this; } private: output_iterator_archetype() { } }; template class input_output_iterator_archetype { private: typedef input_output_iterator_archetype self; struct in_out_tag : public std::input_iterator_tag, public std::output_iterator_tag { }; public: typedef in_out_tag iterator_category; typedef T value_type; struct reference { reference& operator=(const T&) { return *this; } operator value_type() { return static_object::get(); } }; typedef const T* pointer; typedef std::ptrdiff_t difference_type; input_output_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return reference(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template class forward_iterator_archetype { public: typedef forward_iterator_archetype self; public: typedef std::forward_iterator_tag iterator_category; typedef T value_type; typedef const T& reference; typedef T const* pointer; typedef std::ptrdiff_t difference_type; forward_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template class mutable_forward_iterator_archetype { public: typedef mutable_forward_iterator_archetype self; public: typedef std::forward_iterator_tag iterator_category; typedef T value_type; typedef T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; mutable_forward_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template class bidirectional_iterator_archetype { public: typedef bidirectional_iterator_archetype self; public: typedef std::bidirectional_iterator_tag iterator_category; typedef T value_type; typedef const T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; bidirectional_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } self& operator--() { return *this; } self operator--(int) { return *this; } }; template class mutable_bidirectional_iterator_archetype { public: typedef mutable_bidirectional_iterator_archetype self; public: typedef std::bidirectional_iterator_tag iterator_category; typedef T value_type; typedef T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; mutable_bidirectional_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } self& operator--() { return *this; } self operator--(int) { return *this; } }; template class random_access_iterator_archetype { public: typedef random_access_iterator_archetype self; public: typedef std::random_access_iterator_tag iterator_category; typedef T value_type; typedef const T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; random_access_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } self& operator--() { return *this; } self operator--(int) { return *this; } reference operator[](difference_type) const { return static_object::get(); } self& operator+=(difference_type) { return *this; } self& operator-=(difference_type) { return *this; } difference_type operator-(const self&) const { return difference_type(); } self operator+(difference_type) const { return *this; } self operator-(difference_type) const { return *this; } bool operator<(const self&) const { return true; } bool operator<=(const self&) const { return true; } bool operator>(const self&) const { return true; } bool operator>=(const self&) const { return true; } }; template random_access_iterator_archetype operator+(typename random_access_iterator_archetype::difference_type, const random_access_iterator_archetype& x) { return x; } template class mutable_random_access_iterator_archetype { public: typedef mutable_random_access_iterator_archetype self; public: typedef std::random_access_iterator_tag iterator_category; typedef T value_type; typedef T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; mutable_random_access_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } self& operator--() { return *this; } self operator--(int) { return *this; } reference operator[](difference_type) const { return static_object::get(); } self& operator+=(difference_type) { return *this; } self& operator-=(difference_type) { return *this; } difference_type operator-(const self&) const { return difference_type(); } self operator+(difference_type) const { return *this; } self operator-(difference_type) const { return *this; } bool operator<(const self&) const { return true; } bool operator<=(const self&) const { return true; } bool operator>(const self&) const { return true; } bool operator>=(const self&) const { return true; } }; template mutable_random_access_iterator_archetype operator+ (typename mutable_random_access_iterator_archetype::difference_type, const mutable_random_access_iterator_archetype& x) { return x; } } // namespace boost #endif // BOOST_CONCEPT_ARCHETYPES_H concept_check.hpp000444000765000024 10064412161110615 21627 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// // (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& cc) { ci = cc.begin(); ci = cc.end(); n = cc.size(); b = cc.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 config.hpp000444000765000024 414012161110652 20237 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 cstdint.hpp000444000765000024 4260312161110614 20466 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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. cstdlib.hpp000444000765000024 336412161110611 20420 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 current_function.hpp000444000765000024 305312161110604 22360 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 dynamic_bitset.hpp000444000765000024 110112161110611 21755 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// ----------------------------------------------------------- // // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek // 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_DYNAMIC_BITSET_HPP #define BOOST_DYNAMIC_BITSET_HPP #include "boost/dynamic_bitset/dynamic_bitset.hpp" #endif // include guard dynamic_bitset_fwd.hpp000444000765000024 127412161110666 22642 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// ----------------------------------------------------------- // // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek // Copyright (c) 2003-2004 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_DYNAMIC_BITSET_FWD_HPP #define BOOST_DYNAMIC_BITSET_FWD_HPP #include namespace boost { template > class dynamic_bitset; } #endif // include guard enable_shared_from_this.hpp000444000765000024 104412161110644 23621 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 foreach.hpp000444000765000024 13312612161110604 20445 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/////////////////////////////////////////////////////////////////////////////// // foreach.hpp header file // // Copyright 2004 Eric Niebler. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/foreach for documentation // // Credits: // Anson Tsao - for the initial inspiration and several good suggestions. // Thorsten Ottosen - for Boost.Range, and for suggesting a way to detect // const-qualified rvalues at compile time on VC7.1+ // Russell Hind - For help porting to Borland // Alisdair Meredith - For help porting to Borland // Stefan Slapeta - For help porting to Intel // David Jenkins - For help finding a Microsoft Code Analysis bug // mimomorin@... - For a patch to use rvalue refs on supporting compilers #ifndef BOOST_FOREACH // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include // for std::pair #include #include // Some compilers let us detect even const-qualified rvalues at compile-time #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) \ || BOOST_WORKAROUND(BOOST_MSVC, >= 1310) && !defined(_PREFAST_) \ || (BOOST_WORKAROUND(__GNUC__, == 4) && (__GNUC_MINOR__ <= 5) && !defined(BOOST_INTEL) && \ !defined(BOOST_CLANG)) \ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ >= 4) && !defined(BOOST_INTEL) && \ !defined(BOOST_CLANG)) # define BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION #else // Some compilers allow temporaries to be bound to non-const references. // These compilers make it impossible to for BOOST_FOREACH to detect // temporaries and avoid reevaluation of the collection expression. # if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ || BOOST_WORKAROUND(__BORLANDC__, < 0x593) \ || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \ || BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) \ || BOOST_WORKAROUND(__DECCXX_VER, <= 60590042) # define BOOST_FOREACH_NO_RVALUE_DETECTION # endif // Some compilers do not correctly implement the lvalue/rvalue conversion // rules of the ternary conditional operator. # if defined(BOOST_FOREACH_NO_RVALUE_DETECTION) \ || defined(BOOST_NO_SFINAE) \ || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(1400)) \ || BOOST_WORKAROUND(__GNUC__, < 3) \ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 2)) \ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 3) && defined(__APPLE_CC__)) \ || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) \ || BOOST_WORKAROUND(__SUNPRO_CC, >= 0x5100) \ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590)) # define BOOST_FOREACH_NO_CONST_RVALUE_DETECTION # else # define BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION # endif #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION # include # include # include # include #endif namespace boost { // forward declarations for iterator_range template class iterator_range; // forward declarations for sub_range template class sub_range; namespace foreach { /////////////////////////////////////////////////////////////////////////////// // in_range // template inline std::pair in_range(T begin, T end) { return std::make_pair(begin, end); } /////////////////////////////////////////////////////////////////////////////// // boost::foreach::is_lightweight_proxy // Specialize this for user-defined collection types if they are inexpensive to copy. // This tells BOOST_FOREACH it can avoid the rvalue/lvalue detection stuff. template struct is_lightweight_proxy : boost::mpl::false_ { }; /////////////////////////////////////////////////////////////////////////////// // boost::foreach::is_noncopyable // Specialize this for user-defined collection types if they cannot be copied. // This also tells BOOST_FOREACH to avoid the rvalue/lvalue detection stuff. template struct is_noncopyable #if !defined(BOOST_BROKEN_IS_BASE_AND_DERIVED) && !defined(BOOST_NO_IS_ABSTRACT) : boost::mpl::or_< boost::is_abstract , boost::is_base_and_derived > #elif !defined(BOOST_BROKEN_IS_BASE_AND_DERIVED) : boost::is_base_and_derived #elif !defined(BOOST_NO_IS_ABSTRACT) : boost::is_abstract #else : boost::mpl::false_ #endif { }; } // namespace foreach } // namespace boost // vc6/7 needs help ordering the following overloads #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING # define BOOST_FOREACH_TAG_DEFAULT ... #else # define BOOST_FOREACH_TAG_DEFAULT boost::foreach::tag #endif /////////////////////////////////////////////////////////////////////////////// // boost_foreach_is_lightweight_proxy // Another customization point for the is_lightweight_proxy optimization, // this one works on legacy compilers. Overload boost_foreach_is_lightweight_proxy // at the global namespace for your type. template inline boost::foreach::is_lightweight_proxy * boost_foreach_is_lightweight_proxy(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; } template inline boost::mpl::true_ * boost_foreach_is_lightweight_proxy(std::pair *&, boost::foreach::tag) { return 0; } template inline boost::mpl::true_ * boost_foreach_is_lightweight_proxy(boost::iterator_range *&, boost::foreach::tag) { return 0; } template inline boost::mpl::true_ * boost_foreach_is_lightweight_proxy(boost::sub_range *&, boost::foreach::tag) { return 0; } template inline boost::mpl::true_ * boost_foreach_is_lightweight_proxy(T **&, boost::foreach::tag) { return 0; } /////////////////////////////////////////////////////////////////////////////// // boost_foreach_is_noncopyable // Another customization point for the is_noncopyable trait, // this one works on legacy compilers. Overload boost_foreach_is_noncopyable // at the global namespace for your type. template inline boost::foreach::is_noncopyable * boost_foreach_is_noncopyable(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; } namespace boost { namespace foreach_detail_ { /////////////////////////////////////////////////////////////////////////////// // Define some utilities for assessing the properties of expressions // template inline boost::mpl::and_ *and_(Bool1 *, Bool2 *) { return 0; } template inline boost::mpl::and_ *and_(Bool1 *, Bool2 *, Bool3 *) { return 0; } template inline boost::mpl::or_ *or_(Bool1 *, Bool2 *) { return 0; } template inline boost::mpl::or_ *or_(Bool1 *, Bool2 *, Bool3 *) { return 0; } template inline boost::mpl::not_ *not_(Bool1 *) { return 0; } template inline boost::is_array *is_array_(T const &) { return 0; } template inline boost::is_const *is_const_(T &) { return 0; } #ifndef BOOST_FOREACH_NO_RVALUE_DETECTION template inline boost::mpl::true_ *is_const_(T const &) { return 0; } #endif #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES template inline boost::mpl::false_ *is_rvalue_(T &, int) { return 0; } template inline boost::mpl::true_ *is_rvalue_(T const &, ...) { return 0; } #else template inline boost::is_rvalue_reference *is_rvalue_(T &&, int) { return 0; } #endif /////////////////////////////////////////////////////////////////////////////// // auto_any_t/auto_any // General utility for putting an object of any type into automatic storage struct auto_any_base { // auto_any_base must evaluate to false in boolean context so that // they can be declared in if() statements. operator bool() const { return false; } }; template struct auto_any : auto_any_base { explicit auto_any(T const &t) : item(t) { } // temporaries of type auto_any will be bound to const auto_any_base // references, but we still want to be able to mutate the stored // data, so declare it as mutable. mutable T item; }; typedef auto_any_base const &auto_any_t; template inline BOOST_DEDUCED_TYPENAME boost::mpl::if_::type &auto_any_cast(auto_any_t a) { return static_cast const &>(a).item; } typedef boost::mpl::true_ const_; /////////////////////////////////////////////////////////////////////////////// // type2type // template struct type2type : boost::mpl::if_ { }; template struct wrap_cstr { typedef T type; }; template<> struct wrap_cstr { typedef wrap_cstr type; typedef char *iterator; typedef char *const_iterator; }; template<> struct wrap_cstr { typedef wrap_cstr type; typedef char const *iterator; typedef char const *const_iterator; }; template<> struct wrap_cstr { typedef wrap_cstr type; typedef wchar_t *iterator; typedef wchar_t *const_iterator; }; template<> struct wrap_cstr { typedef wrap_cstr type; typedef wchar_t const *iterator; typedef wchar_t const *const_iterator; }; template struct is_char_array : mpl::and_< is_array , mpl::or_< is_convertible , is_convertible > > {}; template struct foreach_iterator { // **** READ THIS IF YOUR COMPILE BREAKS HERE **** // // There is an ambiguity about how to iterate over arrays of char and wchar_t. // Should the last array element be treated as a null terminator to be skipped, or // is it just like any other element in the array? To fix the problem, you must // say which behavior you want. // // To treat the container as a null-terminated string, merely cast it to a // char const *, as in BOOST_FOREACH( char ch, (char const *)"hello" ) ... // // To treat the container as an array, use boost::as_array() in , // as in BOOST_FOREACH( char ch, boost::as_array("hello") ) ... #if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 BOOST_MPL_ASSERT_MSG( (!is_char_array::value), IS_THIS_AN_ARRAY_OR_A_NULL_TERMINATED_STRING, (T&) ); #endif // If the type is a pointer to a null terminated string (as opposed // to an array type), there is no ambiguity. typedef BOOST_DEDUCED_TYPENAME wrap_cstr::type container; typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if< C , range_const_iterator , range_mutable_iterator >::type type; }; template struct foreach_reverse_iterator { // **** READ THIS IF YOUR COMPILE BREAKS HERE **** // // There is an ambiguity about how to iterate over arrays of char and wchar_t. // Should the last array element be treated as a null terminator to be skipped, or // is it just like any other element in the array? To fix the problem, you must // say which behavior you want. // // To treat the container as a null-terminated string, merely cast it to a // char const *, as in BOOST_FOREACH( char ch, (char const *)"hello" ) ... // // To treat the container as an array, use boost::as_array() in , // as in BOOST_FOREACH( char ch, boost::as_array("hello") ) ... #if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 BOOST_MPL_ASSERT_MSG( (!is_char_array::value), IS_THIS_AN_ARRAY_OR_A_NULL_TERMINATED_STRING, (T&) ); #endif // If the type is a pointer to a null terminated string (as opposed // to an array type), there is no ambiguity. typedef BOOST_DEDUCED_TYPENAME wrap_cstr::type container; typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if< C , range_reverse_iterator , range_reverse_iterator >::type type; }; template struct foreach_reference : iterator_reference::type> { }; /////////////////////////////////////////////////////////////////////////////// // encode_type // template inline type2type *encode_type(T &, boost::mpl::false_ *) { return 0; } template inline type2type *encode_type(T const &, boost::mpl::true_ *) { return 0; } /////////////////////////////////////////////////////////////////////////////// // set_false // inline bool set_false(bool &b) { b = false; return false; } /////////////////////////////////////////////////////////////////////////////// // to_ptr // template inline T *&to_ptr(T const &) { static T *t = 0; return t; } // Borland needs a little extra help with arrays #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) template inline T (*&to_ptr(T (&)[N]))[N] { static T (*t)[N] = 0; return t; } /////////////////////////////////////////////////////////////////////////////// // derefof // template inline T &derefof(T *t) { // This is a work-around for a compiler bug in Borland. If T* is a pointer to array type U(*)[N], // then dereferencing it results in a U* instead of U(&)[N]. The cast forces the issue. return reinterpret_cast( *const_cast( reinterpret_cast(t) ) ); } # define BOOST_FOREACH_DEREFOF(T) boost::foreach_detail_::derefof(*T) #else # define BOOST_FOREACH_DEREFOF(T) (*T) #endif #if defined(BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION) \ && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) /////////////////////////////////////////////////////////////////////////////// // Rvalue references makes it drop-dead simple to detect at compile time // whether an expression is an rvalue. /////////////////////////////////////////////////////////////////////////////// # define BOOST_FOREACH_IS_RVALUE(COL) \ boost::foreach_detail_::is_rvalue_((COL), 0) #elif defined(BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION) \ && defined(BOOST_NO_CXX11_RVALUE_REFERENCES) /////////////////////////////////////////////////////////////////////////////// // Detect at compile-time whether an expression yields an rvalue or // an lvalue. This is rather non-standard, but some popular compilers // accept it. /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // rvalue_probe // template struct rvalue_probe { struct private_type_ {}; // can't ever return an array by value typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< boost::mpl::or_, boost::is_array >, private_type_, T >::type value_type; operator value_type() { return *reinterpret_cast(this); } // never called operator T &() const { return *reinterpret_cast(const_cast(this)); } // never called }; template rvalue_probe const make_probe(T const &) { return rvalue_probe(); } # define BOOST_FOREACH_IS_RVALUE(COL) \ boost::foreach_detail_::and_( \ boost::foreach_detail_::not_(boost::foreach_detail_::is_array_(COL)) \ , (true ? 0 : boost::foreach_detail_::is_rvalue_( \ (true ? boost::foreach_detail_::make_probe(COL) : (COL)), 0))) #elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION) /////////////////////////////////////////////////////////////////////////////// // Detect at run-time whether an expression yields an rvalue // or an lvalue. This is 100% standard C++, but not all compilers // accept it. Also, it causes FOREACH to break when used with non- // copyable collection types. /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // rvalue_probe // template struct rvalue_probe { rvalue_probe(T &t, bool &b) : value(t) , is_rvalue(b) { } struct private_type_ {}; // can't ever return an array or an abstract type by value #ifdef BOOST_NO_IS_ABSTRACT typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< boost::is_array, private_type_, T >::type value_type; #else typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< boost::mpl::or_, boost::is_array >, private_type_, T >::type value_type; #endif operator value_type() { this->is_rvalue = true; return this->value; } operator T &() const { return this->value; } private: T &value; bool &is_rvalue; }; template rvalue_probe make_probe(T &t, bool &b) { return rvalue_probe(t, b); } template rvalue_probe make_probe(T const &t, bool &b) { return rvalue_probe(t, b); } /////////////////////////////////////////////////////////////////////////////// // simple_variant // holds either a T or a T const* template struct simple_variant { simple_variant(T const *t) : is_rvalue(false) { *static_cast(this->data.address()) = t; } simple_variant(T const &t) : is_rvalue(true) { ::new(this->data.address()) T(t); } simple_variant(simple_variant const &that) : is_rvalue(that.is_rvalue) { if(this->is_rvalue) ::new(this->data.address()) T(*that.get()); else *static_cast(this->data.address()) = that.get(); } ~simple_variant() { if(this->is_rvalue) this->get()->~T(); } T const *get() const { if(this->is_rvalue) return static_cast(this->data.address()); else return *static_cast(this->data.address()); } private: enum size_type { size = sizeof(T) > sizeof(T*) ? sizeof(T) : sizeof(T*) }; simple_variant &operator =(simple_variant const &); bool const is_rvalue; aligned_storage data; }; // If the collection is an array or is noncopyable, it must be an lvalue. // If the collection is a lightweight proxy, treat it as an rvalue // BUGBUG what about a noncopyable proxy? template inline BOOST_DEDUCED_TYPENAME boost::enable_if, IsProxy>::type * should_copy_impl(LValue *, IsProxy *, bool *) { return 0; } // Otherwise, we must determine at runtime whether it's an lvalue or rvalue inline bool * should_copy_impl(boost::mpl::false_ *, boost::mpl::false_ *, bool *is_rvalue) { return is_rvalue; } #endif /////////////////////////////////////////////////////////////////////////////// // contain // template inline auto_any contain(T const &t, boost::mpl::true_ *) // rvalue { return auto_any(t); } template inline auto_any contain(T &t, boost::mpl::false_ *) // lvalue { // Cannot seem to get sunpro to handle addressof() with array types. #if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570)) return auto_any(&t); #else return auto_any(boost::addressof(t)); #endif } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION template inline auto_any > contain(T const &t, bool *rvalue) { return auto_any >(*rvalue ? simple_variant(t) : simple_variant(&t)); } #endif ///////////////////////////////////////////////////////////////////////////// // begin // template inline auto_any::type> begin(auto_any_t col, type2type *, boost::mpl::true_ *) // rvalue { return auto_any::type>( boost::begin(auto_any_cast(col))); } template inline auto_any::type> begin(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue { typedef BOOST_DEDUCED_TYPENAME type2type::type type; typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iterator; return auto_any::type>( iterator(boost::begin(BOOST_FOREACH_DEREFOF((auto_any_cast(col)))))); } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION template inline auto_any::type> begin(auto_any_t col, type2type *, bool *) { return auto_any::type>( boost::begin(*auto_any_cast, boost::mpl::false_>(col).get())); } #endif #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING template inline auto_any begin(auto_any_t col, type2type *, boost::mpl::true_ *) // null-terminated C-style strings { return auto_any(auto_any_cast(col)); } #endif /////////////////////////////////////////////////////////////////////////////// // end // template inline auto_any::type> end(auto_any_t col, type2type *, boost::mpl::true_ *) // rvalue { return auto_any::type>( boost::end(auto_any_cast(col))); } template inline auto_any::type> end(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue { typedef BOOST_DEDUCED_TYPENAME type2type::type type; typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iterator; return auto_any::type>( iterator(boost::end(BOOST_FOREACH_DEREFOF((auto_any_cast(col)))))); } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION template inline auto_any::type> end(auto_any_t col, type2type *, bool *) { return auto_any::type>( boost::end(*auto_any_cast, boost::mpl::false_>(col).get())); } #endif #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING template inline auto_any end(auto_any_t, type2type *, boost::mpl::true_ *) // null-terminated C-style strings { return auto_any(0); // not used } #endif /////////////////////////////////////////////////////////////////////////////// // done // template inline bool done(auto_any_t cur, auto_any_t end, type2type *) { typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iter_t; return auto_any_cast(cur) == auto_any_cast(end); } #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING template inline bool done(auto_any_t cur, auto_any_t, type2type *) // null-terminated C-style strings { return ! *auto_any_cast(cur); } #endif /////////////////////////////////////////////////////////////////////////////// // next // template inline void next(auto_any_t cur, type2type *) { typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iter_t; ++auto_any_cast(cur); } /////////////////////////////////////////////////////////////////////////////// // deref // template inline BOOST_DEDUCED_TYPENAME foreach_reference::type deref(auto_any_t cur, type2type *) { typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iter_t; return *auto_any_cast(cur); } ///////////////////////////////////////////////////////////////////////////// // rbegin // template inline auto_any::type> rbegin(auto_any_t col, type2type *, boost::mpl::true_ *) // rvalue { return auto_any::type>( boost::rbegin(auto_any_cast(col))); } template inline auto_any::type> rbegin(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue { typedef BOOST_DEDUCED_TYPENAME type2type::type type; typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator::type iterator; return auto_any::type>( iterator(boost::rbegin(BOOST_FOREACH_DEREFOF((auto_any_cast(col)))))); } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION template inline auto_any::type> rbegin(auto_any_t col, type2type *, bool *) { return auto_any::type>( boost::rbegin(*auto_any_cast, boost::mpl::false_>(col).get())); } #endif #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING template inline auto_any > rbegin(auto_any_t col, type2type *, boost::mpl::true_ *) // null-terminated C-style strings { T *p = auto_any_cast(col); while(0 != *p) ++p; return auto_any >(reverse_iterator(p)); } #endif /////////////////////////////////////////////////////////////////////////////// // rend // template inline auto_any::type> rend(auto_any_t col, type2type *, boost::mpl::true_ *) // rvalue { return auto_any::type>( boost::rend(auto_any_cast(col))); } template inline auto_any::type> rend(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue { typedef BOOST_DEDUCED_TYPENAME type2type::type type; typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator::type iterator; return auto_any::type>( iterator(boost::rend(BOOST_FOREACH_DEREFOF((auto_any_cast(col)))))); } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION template inline auto_any::type> rend(auto_any_t col, type2type *, bool *) { return auto_any::type>( boost::rend(*auto_any_cast, boost::mpl::false_>(col).get())); } #endif #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING template inline auto_any > rend(auto_any_t col, type2type *, boost::mpl::true_ *) // null-terminated C-style strings { return auto_any >( reverse_iterator(auto_any_cast(col))); } #endif /////////////////////////////////////////////////////////////////////////////// // rdone // template inline bool rdone(auto_any_t cur, auto_any_t end, type2type *) { typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator::type iter_t; return auto_any_cast(cur) == auto_any_cast(end); } /////////////////////////////////////////////////////////////////////////////// // rnext // template inline void rnext(auto_any_t cur, type2type *) { typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator::type iter_t; ++auto_any_cast(cur); } /////////////////////////////////////////////////////////////////////////////// // rderef // template inline BOOST_DEDUCED_TYPENAME foreach_reference::type rderef(auto_any_t cur, type2type *) { typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator::type iter_t; return *auto_any_cast(cur); } } // namespace foreach_detail_ } // namespace boost // Suppress a bogus code analysis warning on vc8+ #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) # define BOOST_FOREACH_SUPPRESS_WARNINGS() __pragma(warning(suppress:6001)) #else # define BOOST_FOREACH_SUPPRESS_WARNINGS() #endif /////////////////////////////////////////////////////////////////////////////// // Define a macro for giving hidden variables a unique name. Not strictly // needed, but eliminates some warnings on some compilers. #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) // With some versions of MSVC, use of __LINE__ to create unique identifiers // can fail when the Edit-and-Continue debug flag is used. # define BOOST_FOREACH_ID(x) x #else # define BOOST_FOREACH_ID(x) BOOST_PP_CAT(x, __LINE__) #endif // A sneaky way to get the type of the collection without evaluating the expression #define BOOST_FOREACH_TYPEOF(COL) \ (true ? 0 : boost::foreach_detail_::encode_type(COL, boost::foreach_detail_::is_const_(COL))) // returns true_* if the type is noncopyable #define BOOST_FOREACH_IS_NONCOPYABLE(COL) \ boost_foreach_is_noncopyable( \ boost::foreach_detail_::to_ptr(COL) \ , boost_foreach_argument_dependent_lookup_hack_value) // returns true_* if the type is a lightweight proxy (and is not noncopyable) #define BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL) \ boost::foreach_detail_::and_( \ boost::foreach_detail_::not_(BOOST_FOREACH_IS_NONCOPYABLE(COL)) \ , boost_foreach_is_lightweight_proxy( \ boost::foreach_detail_::to_ptr(COL) \ , boost_foreach_argument_dependent_lookup_hack_value)) #if defined(BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION) /////////////////////////////////////////////////////////////////////////////// // R-values and const R-values supported here with zero runtime overhead /////////////////////////////////////////////////////////////////////////////// // No variable is needed to track the rvalue-ness of the collection expression # define BOOST_FOREACH_PREAMBLE() \ BOOST_FOREACH_SUPPRESS_WARNINGS() // Evaluate the collection expression # define BOOST_FOREACH_EVALUATE(COL) \ (COL) # define BOOST_FOREACH_SHOULD_COPY(COL) \ (true ? 0 : boost::foreach_detail_::or_( \ BOOST_FOREACH_IS_RVALUE(COL) \ , BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL))) #elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION) /////////////////////////////////////////////////////////////////////////////// // R-values and const R-values supported here /////////////////////////////////////////////////////////////////////////////// // Declare a variable to track the rvalue-ness of the collection expression # define BOOST_FOREACH_PREAMBLE() \ BOOST_FOREACH_SUPPRESS_WARNINGS() \ if (bool BOOST_FOREACH_ID(_foreach_is_rvalue) = false) {} else // Evaluate the collection expression, and detect if it is an lvalue or and rvalue # define BOOST_FOREACH_EVALUATE(COL) \ (true ? boost::foreach_detail_::make_probe((COL), BOOST_FOREACH_ID(_foreach_is_rvalue)) : (COL)) // The rvalue/lvalue-ness of the collection expression is determined dynamically, unless // the type is an array or is noncopyable or is non-const, in which case we know it's an lvalue. // If the type happens to be a lightweight proxy, always make a copy. # define BOOST_FOREACH_SHOULD_COPY(COL) \ (boost::foreach_detail_::should_copy_impl( \ true ? 0 : boost::foreach_detail_::or_( \ boost::foreach_detail_::is_array_(COL) \ , BOOST_FOREACH_IS_NONCOPYABLE(COL) \ , boost::foreach_detail_::not_(boost::foreach_detail_::is_const_(COL))) \ , true ? 0 : BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL) \ , &BOOST_FOREACH_ID(_foreach_is_rvalue))) #elif !defined(BOOST_FOREACH_NO_RVALUE_DETECTION) /////////////////////////////////////////////////////////////////////////////// // R-values supported here, const R-values NOT supported here /////////////////////////////////////////////////////////////////////////////// // No variable is needed to track the rvalue-ness of the collection expression # define BOOST_FOREACH_PREAMBLE() \ BOOST_FOREACH_SUPPRESS_WARNINGS() // Evaluate the collection expression # define BOOST_FOREACH_EVALUATE(COL) \ (COL) // Determine whether the collection expression is an lvalue or an rvalue. // NOTE: this gets the answer wrong for const rvalues. # define BOOST_FOREACH_SHOULD_COPY(COL) \ (true ? 0 : boost::foreach_detail_::or_( \ boost::foreach_detail_::is_rvalue_((COL), 0) \ , BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL))) #else /////////////////////////////////////////////////////////////////////////////// // R-values NOT supported here /////////////////////////////////////////////////////////////////////////////// // No variable is needed to track the rvalue-ness of the collection expression # define BOOST_FOREACH_PREAMBLE() \ BOOST_FOREACH_SUPPRESS_WARNINGS() // Evaluate the collection expression # define BOOST_FOREACH_EVALUATE(COL) \ (COL) // Can't use rvalues with BOOST_FOREACH (unless they are lightweight proxies) # define BOOST_FOREACH_SHOULD_COPY(COL) \ (true ? 0 : BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL)) #endif #define BOOST_FOREACH_CONTAIN(COL) \ boost::foreach_detail_::contain( \ BOOST_FOREACH_EVALUATE(COL) \ , BOOST_FOREACH_SHOULD_COPY(COL)) #define BOOST_FOREACH_BEGIN(COL) \ boost::foreach_detail_::begin( \ BOOST_FOREACH_ID(_foreach_col) \ , BOOST_FOREACH_TYPEOF(COL) \ , BOOST_FOREACH_SHOULD_COPY(COL)) #define BOOST_FOREACH_END(COL) \ boost::foreach_detail_::end( \ BOOST_FOREACH_ID(_foreach_col) \ , BOOST_FOREACH_TYPEOF(COL) \ , BOOST_FOREACH_SHOULD_COPY(COL)) #define BOOST_FOREACH_DONE(COL) \ boost::foreach_detail_::done( \ BOOST_FOREACH_ID(_foreach_cur) \ , BOOST_FOREACH_ID(_foreach_end) \ , BOOST_FOREACH_TYPEOF(COL)) #define BOOST_FOREACH_NEXT(COL) \ boost::foreach_detail_::next( \ BOOST_FOREACH_ID(_foreach_cur) \ , BOOST_FOREACH_TYPEOF(COL)) #define BOOST_FOREACH_DEREF(COL) \ boost::foreach_detail_::deref( \ BOOST_FOREACH_ID(_foreach_cur) \ , BOOST_FOREACH_TYPEOF(COL)) #define BOOST_FOREACH_RBEGIN(COL) \ boost::foreach_detail_::rbegin( \ BOOST_FOREACH_ID(_foreach_col) \ , BOOST_FOREACH_TYPEOF(COL) \ , BOOST_FOREACH_SHOULD_COPY(COL)) #define BOOST_FOREACH_REND(COL) \ boost::foreach_detail_::rend( \ BOOST_FOREACH_ID(_foreach_col) \ , BOOST_FOREACH_TYPEOF(COL) \ , BOOST_FOREACH_SHOULD_COPY(COL)) #define BOOST_FOREACH_RDONE(COL) \ boost::foreach_detail_::rdone( \ BOOST_FOREACH_ID(_foreach_cur) \ , BOOST_FOREACH_ID(_foreach_end) \ , BOOST_FOREACH_TYPEOF(COL)) #define BOOST_FOREACH_RNEXT(COL) \ boost::foreach_detail_::rnext( \ BOOST_FOREACH_ID(_foreach_cur) \ , BOOST_FOREACH_TYPEOF(COL)) #define BOOST_FOREACH_RDEREF(COL) \ boost::foreach_detail_::rderef( \ BOOST_FOREACH_ID(_foreach_cur) \ , BOOST_FOREACH_TYPEOF(COL)) /////////////////////////////////////////////////////////////////////////////// // BOOST_FOREACH // // For iterating over collections. Collections can be // arrays, null-terminated strings, or STL containers. // The loop variable can be a value or reference. For // example: // // std::list int_list(/*stuff*/); // BOOST_FOREACH(int &i, int_list) // { // /* // * loop body goes here. // * i is a reference to the int in int_list. // */ // } // // Alternately, you can declare the loop variable first, // so you can access it after the loop finishes. Obviously, // if you do it this way, then the loop variable cannot be // a reference. // // int i; // BOOST_FOREACH(i, int_list) // { ... } // #define BOOST_FOREACH(VAR, COL) \ BOOST_FOREACH_PREAMBLE() \ if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_col) = BOOST_FOREACH_CONTAIN(COL)) {} else \ if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_cur) = BOOST_FOREACH_BEGIN(COL)) {} else \ if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_end) = BOOST_FOREACH_END(COL)) {} else \ for (bool BOOST_FOREACH_ID(_foreach_continue) = true; \ BOOST_FOREACH_ID(_foreach_continue) && !BOOST_FOREACH_DONE(COL); \ BOOST_FOREACH_ID(_foreach_continue) ? BOOST_FOREACH_NEXT(COL) : (void)0) \ if (boost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_continue))) {} else \ for (VAR = BOOST_FOREACH_DEREF(COL); !BOOST_FOREACH_ID(_foreach_continue); BOOST_FOREACH_ID(_foreach_continue) = true) /////////////////////////////////////////////////////////////////////////////// // BOOST_REVERSE_FOREACH // // For iterating over collections in reverse order. In // all other respects, BOOST_REVERSE_FOREACH is like // BOOST_FOREACH. // #define BOOST_REVERSE_FOREACH(VAR, COL) \ BOOST_FOREACH_PREAMBLE() \ if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_col) = BOOST_FOREACH_CONTAIN(COL)) {} else \ if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_cur) = BOOST_FOREACH_RBEGIN(COL)) {} else \ if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_end) = BOOST_FOREACH_REND(COL)) {} else \ for (bool BOOST_FOREACH_ID(_foreach_continue) = true; \ BOOST_FOREACH_ID(_foreach_continue) && !BOOST_FOREACH_RDONE(COL); \ BOOST_FOREACH_ID(_foreach_continue) ? BOOST_FOREACH_RNEXT(COL) : (void)0) \ if (boost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_continue))) {} else \ for (VAR = BOOST_FOREACH_RDEREF(COL); !BOOST_FOREACH_ID(_foreach_continue); BOOST_FOREACH_ID(_foreach_continue) = true) #endif foreach_fwd.hpp000444000765000024 333112161110641 21240 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/////////////////////////////////////////////////////////////////////////////// // foreach.hpp header file // // Copyright 2010 Eric Niebler. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/foreach for documentation // // Credits: // Kazutoshi Satoda: for suggesting the need for a _fwd header for foreach's // customization points. #ifndef BOOST_FOREACH_FWD_HPP #define BOOST_FOREACH_FWD_HPP // This must be at global scope, hence the uglified name enum boost_foreach_argument_dependent_lookup_hack { boost_foreach_argument_dependent_lookup_hack_value }; namespace boost { namespace foreach { /////////////////////////////////////////////////////////////////////////////// // boost::foreach::tag // typedef boost_foreach_argument_dependent_lookup_hack tag; /////////////////////////////////////////////////////////////////////////////// // boost::foreach::is_lightweight_proxy // Specialize this for user-defined collection types if they are inexpensive to copy. // This tells BOOST_FOREACH it can avoid the rvalue/lvalue detection stuff. template struct is_lightweight_proxy; /////////////////////////////////////////////////////////////////////////////// // boost::foreach::is_noncopyable // Specialize this for user-defined collection types if they cannot be copied. // This also tells BOOST_FOREACH to avoid the rvalue/lvalue detection stuff. template struct is_noncopyable; } // namespace foreach } // namespace boost #endif format.hpp000444000765000024 427612161110666 20301 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// ---------------------------------------------------------------------------- // 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 function.hpp000444000765000024 433212161110700 20614 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 function_equal.hpp000444000765000024 146312161110646 22016 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 geometry.hpp000444000765000024 132312161110655 20630 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2011 Bruno Lalande, Paris, France. // Copyright (c) 2009-2011 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_HPP #define BOOST_GEOMETRY_HPP #include #endif // BOOST_GEOMETRY_HPP get_pointer.hpp000444000765000024 231112161110603 21303 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// Copyright Peter Dimov and David Abrahams 2002. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef GET_POINTER_DWA20021219_HPP #define GET_POINTER_DWA20021219_HPP #include // 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(); } #if !defined( BOOST_NO_CXX11_SMART_PTR ) template T * get_pointer( std::unique_ptr const& p ) { return p.get(); } template T * get_pointer( std::shared_ptr const& p ) { return p.get(); } #endif } // namespace boost #endif // GET_POINTER_DWA20021219_HPP implicit_cast.hpp000444000765000024 146712161110617 21630 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 integer.hpp000444000765000024 2646712161110637 20472 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 #include // // 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 template< int Category > struct uint_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 uint_least_helper<1> { typedef boost::ulong_long_type least; }; #elif defined(BOOST_HAS_MS_INT64) template<> struct uint_least_helper<1> { typedef unsigned __int64 least; }; #endif template<> struct uint_least_helper<2> { typedef unsigned long least; }; template<> struct uint_least_helper<3> { typedef unsigned int least; }; template<> struct uint_least_helper<4> { typedef unsigned short least; }; template<> struct uint_least_helper<5> { 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 { BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(boost::intmax_t) * CHAR_BIT), "No suitable signed integer type with the requested number of bits is available."); typedef typename detail::int_least_helper < #ifdef BOOST_HAS_LONG_LONG (Bits <= (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 { BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(boost::uintmax_t) * CHAR_BIT), "No suitable unsigned integer type with the requested number of bits is available."); #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::uint_least_helper < #ifdef BOOST_HAS_LONG_LONG (Bits <= (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 = 1 + (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 = 1 + (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::uint_least_helper< ::boost::uint_value_t::which>::least least; #endif // BOOST_NO_INTEGRAL_INT64_T #else typedef typename detail::uint_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; #endif typedef typename int_fast_t::type fast; }; } // namespace boost #endif // BOOST_INTEGER_HPP integer_fwd.hpp000444000765000024 1125512161110642 21313 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 integer_traits.hpp000444000765000024 2141712161110702 22037 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/* 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 81851 2012-12-11 14:42:26Z marshall $ * * 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 */ intrusive_ptr.hpp000444000765000024 100512161110604 21701 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 io_fwd.hpp000444000765000024 462012161110652 20244 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 is_placeholder.hpp000444000765000024 123112161110667 21753 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 iterator.hpp000444000765000024 377212161110612 20631 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 lexical_cast.hpp000444000765000024 31307012161110650 21470 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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, Pavel Korzh 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef BOOST_NO_STD_LOCALE # include #else # ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE // Getting error at this point means, that your STL library is old/lame/misconfigured. // If nothing can be done with STL library, define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE, // but beware: lexical_cast will understand only 'C' locale delimeters and thousands // separators. # error "Unable to use header. Define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE to force " # error "boost::lexical_cast to use only 'C' locale during conversions." # 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 BOOST_SYMBOL_VISIBLE 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() BOOST_NOEXCEPT : #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) BOOST_NOEXCEPT : 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; } #ifndef BOOST_NO_CXX11_NOEXCEPT virtual const char *what() const noexcept #else virtual const char *what() const throw() #endif { return "bad lexical cast: " "source type value could not be interpreted as target"; } #ifndef BOOST_NO_CXX11_NOEXCEPT virtual ~bad_lexical_cast() BOOST_NOEXCEPT #else virtual ~bad_lexical_cast() throw() #endif {} private: const std::type_info *source; const std::type_info *target; }; namespace detail // widest_char { template struct widest_char { typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c< (sizeof(TargetChar) > sizeof(SourceChar)) , TargetChar , SourceChar >::type type; }; } } // namespace boost #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(__SUNPRO_CC) && !defined(__PGIC__) #include #include #ifndef BOOST_NO_CXX11_HDR_ARRAY #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef BOOST_NO_CWCHAR # include #endif namespace boost { namespace detail // is_char_or_wchar<...> { // returns true, if T is one of the character types template < typename T > struct is_char_or_wchar { typedef boost::type_traits::ice_or< boost::is_same< T, char >::value, #ifndef BOOST_LCAST_NO_WCHAR_T boost::is_same< T, wchar_t >::value, #endif #ifndef BOOST_NO_CXX11_CHAR16_T boost::is_same< T, char16_t >::value, #endif #ifndef BOOST_NO_CXX11_CHAR32_T boost::is_same< T, char32_t >::value, #endif boost::is_same< T, unsigned char >::value, boost::is_same< T, signed char >::value > result_type; BOOST_STATIC_CONSTANT(bool, value = (result_type::value) ); }; } namespace detail // normalize_single_byte_char { // Converts signed/unsigned char to char template < class Char > struct normalize_single_byte_char { typedef Char type; }; template <> struct normalize_single_byte_char< signed char > { typedef char type; }; template <> struct normalize_single_byte_char< unsigned char > { typedef char type; }; } namespace detail // deduce_character_type_later { // Helper type, meaning that stram character for T must be deduced // at Stage 2 (See deduce_source_char and deduce_target_char) template < class T > struct deduce_character_type_later {}; } namespace detail // stream_char_common { // Selectors to choose stream character type (common for Source and Target) // Returns one of char, wchar_t, char16_t, char32_t or deduce_character_type_later types // Executed on Stage 1 (See deduce_source_char and deduce_target_char) template < typename Type > struct stream_char_common: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Type >::value, Type, boost::detail::deduce_character_type_later< Type > > {}; template < typename Char > struct stream_char_common< Char* >: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Char >::value, Char, boost::detail::deduce_character_type_later< Char* > > {}; template < typename Char > struct stream_char_common< const Char* >: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Char >::value, Char, boost::detail::deduce_character_type_later< const Char* > > {}; template < typename Char > struct stream_char_common< boost::iterator_range< Char* > >: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Char >::value, Char, boost::detail::deduce_character_type_later< boost::iterator_range< Char* > > > {}; template < typename Char > struct stream_char_common< boost::iterator_range< const Char* > >: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Char >::value, Char, boost::detail::deduce_character_type_later< boost::iterator_range< const Char* > > > {}; template < class Char, class Traits, class Alloc > struct stream_char_common< std::basic_string< Char, Traits, Alloc > > { typedef Char type; }; template < class Char, class Traits, class Alloc > struct stream_char_common< boost::container::basic_string< Char, Traits, Alloc > > { typedef Char type; }; template < typename Char, std::size_t N > struct stream_char_common< boost::array< Char, N > >: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Char >::value, Char, boost::detail::deduce_character_type_later< boost::array< Char, N > > > {}; template < typename Char, std::size_t N > struct stream_char_common< boost::array< const Char, N > >: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Char >::value, Char, boost::detail::deduce_character_type_later< boost::array< const Char, N > > > {}; #ifndef BOOST_NO_CXX11_HDR_ARRAY template < typename Char, std::size_t N > struct stream_char_common< std::array >: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Char >::value, Char, boost::detail::deduce_character_type_later< std::array< Char, N > > > {}; template < typename Char, std::size_t N > struct stream_char_common< std::array< const Char, N > >: public boost::mpl::if_c< boost::detail::is_char_or_wchar< Char >::value, Char, boost::detail::deduce_character_type_later< std::array< const Char, N > > > {}; #endif #if !defined(BOOST_LCAST_NO_WCHAR_T) && defined(BOOST_NO_INTRINSIC_WCHAR_T) template <> struct stream_char_common< wchar_t > { typedef char type; }; #endif } namespace detail // deduce_source_char_impl { // If type T is `deduce_character_type_later` type, then tries to deduce // character type using boost::has_left_shift metafunction. // Otherwise supplied type T is a character type, that must be normalized // using normalize_single_byte_char. // Executed at Stage 2 (See deduce_source_char and deduce_target_char) template < class Char > struct deduce_source_char_impl { typedef BOOST_DEDUCED_TYPENAME boost::detail::normalize_single_byte_char< Char >::type type; }; template < class T > struct deduce_source_char_impl< deduce_character_type_later< T > > { typedef boost::has_left_shift< std::basic_ostream< char >, T > result_t; #if defined(BOOST_LCAST_NO_WCHAR_T) BOOST_STATIC_ASSERT_MSG((result_t::value), "Source type is not std::ostream`able and std::wostream`s are not supported by your STL implementation"); typedef char type; #else typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c< result_t::value, char, wchar_t >::type type; BOOST_STATIC_ASSERT_MSG((result_t::value || boost::has_left_shift< std::basic_ostream< type >, T >::value), "Source type is neither std::ostream`able nor std::wostream`able"); #endif }; } namespace detail // deduce_target_char_impl { // If type T is `deduce_character_type_later` type, then tries to deduce // character type using boost::has_right_shift metafunction. // Otherwise supplied type T is a character type, that must be normalized // using normalize_single_byte_char. // Executed at Stage 2 (See deduce_source_char and deduce_target_char) template < class Char > struct deduce_target_char_impl { typedef BOOST_DEDUCED_TYPENAME normalize_single_byte_char< Char >::type type; }; template < class T > struct deduce_target_char_impl< deduce_character_type_later > { typedef boost::has_right_shift, T > result_t; #if defined(BOOST_LCAST_NO_WCHAR_T) BOOST_STATIC_ASSERT_MSG((result_t::value), "Target type is not std::istream`able and std::wistream`s are not supported by your STL implementation"); typedef char type; #else typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c< result_t::value, char, wchar_t >::type type; BOOST_STATIC_ASSERT_MSG((result_t::value || boost::has_right_shift, T >::value), "Target type is neither std::istream`able nor std::wistream`able"); #endif }; } namespace detail // deduce_target_char and deduce_source_char { // We deduce stream character types in two stages. // // Stage 1 is common for Target and Source. At Stage 1 we get // non normalized character type (may contain unsigned/signed char) // or deduce_character_type_later where T is the original type. // Stage 1 is executed by stream_char_common // // At Stage 2 we normalize character types or try to deduce character // type using metafunctions. // Stage 2 is executed by deduce_target_char_impl and // deduce_source_char_impl // // deduce_target_char and deduce_source_char functions combine // both stages template < class T > struct deduce_target_char { typedef BOOST_DEDUCED_TYPENAME stream_char_common< T >::type stage1_type; typedef BOOST_DEDUCED_TYPENAME deduce_target_char_impl< stage1_type >::type stage2_type; typedef stage2_type type; }; template < class T > struct deduce_source_char { typedef BOOST_DEDUCED_TYPENAME stream_char_common< T >::type stage1_type; typedef BOOST_DEDUCED_TYPENAME deduce_source_char_impl< stage1_type >::type stage2_type; typedef stage2_type type; }; } namespace detail // deduce_char_traits template { // We are attempting to get char_traits<> from Source or Tagret // template parameter. Otherwise we'll be using std::char_traits template < class Char, class Target, class Source > struct deduce_char_traits { typedef std::char_traits< Char > type; }; template < class Char, class Traits, class Alloc, class Source > struct deduce_char_traits< Char , std::basic_string< Char, Traits, Alloc > , Source > { typedef Traits type; }; template < class Char, class Target, class Traits, class Alloc > struct deduce_char_traits< Char , Target , std::basic_string< Char, Traits, Alloc > > { typedef Traits type; }; template < class Char, class Traits, class Alloc, class Source > struct deduce_char_traits< Char , boost::container::basic_string< Char, Traits, Alloc > , Source > { typedef Traits type; }; template < class Char, class Target, class Traits, class Alloc > struct deduce_char_traits< Char , Target , boost::container::basic_string< Char, Traits, Alloc > > { typedef Traits type; }; template < class Char, class Traits, class Alloc1, class Alloc2 > struct deduce_char_traits< Char , std::basic_string< Char, Traits, Alloc1 > , std::basic_string< Char, Traits, Alloc2 > > { typedef Traits type; }; template struct deduce_char_traits< Char , boost::container::basic_string< Char, Traits, Alloc1 > , boost::container::basic_string< Char, Traits, Alloc2 > > { typedef Traits type; }; template < class Char, class Traits, class Alloc1, class Alloc2 > struct deduce_char_traits< Char , boost::container::basic_string< Char, Traits, Alloc1 > , std::basic_string< Char, Traits, Alloc2 > > { typedef Traits type; }; template < class Char, class Traits, class Alloc1, class Alloc2 > struct deduce_char_traits< Char , std::basic_string< Char, Traits, Alloc1 > , boost::container::basic_string< Char, Traits, Alloc2 > > { typedef Traits type; }; } namespace detail // array_to_pointer_decay { template struct array_to_pointer_decay { typedef T type; }; template struct array_to_pointer_decay { typedef const T * type; }; } namespace detail // is_this_float_conversion_optimized { // this metafunction evaluates to true, if we have optimized comnversion // from Float type to Char array. // Must be in sync with lexical_stream_limited_src::shl_real_type(...) template struct is_this_float_conversion_optimized { typedef boost::type_traits::ice_and< boost::is_float::value, #if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_SWPRINTF) && !defined(__MINGW32__) boost::type_traits::ice_or< boost::type_traits::ice_eq::value, boost::is_same::value >::value #else boost::type_traits::ice_eq::value #endif > result_type; BOOST_STATIC_CONSTANT(bool, value = (result_type::value) ); }; } 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 }; #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 // lexical_cast_stream_traits { template struct lexical_cast_stream_traits { typedef BOOST_DEDUCED_TYPENAME boost::detail::array_to_pointer_decay::type src; typedef BOOST_DEDUCED_TYPENAME boost::remove_cv::type no_cv_src; typedef boost::detail::deduce_source_char deduce_src_char_metafunc; typedef BOOST_DEDUCED_TYPENAME deduce_src_char_metafunc::type src_char_t; typedef BOOST_DEDUCED_TYPENAME boost::detail::deduce_target_char::type target_char_t; typedef BOOST_DEDUCED_TYPENAME boost::detail::widest_char< target_char_t, src_char_t >::type char_type; #if !defined(BOOST_NO_CXX11_CHAR16_T) && defined(BOOST_NO_CXX11_UNICODE_LITERALS) BOOST_STATIC_ASSERT_MSG(( !boost::is_same::value && !boost::is_same::value), "Your compiler does not have full support for char16_t" ); #endif #if !defined(BOOST_NO_CXX11_CHAR32_T) && defined(BOOST_NO_CXX11_UNICODE_LITERALS) BOOST_STATIC_ASSERT_MSG(( !boost::is_same::value && !boost::is_same::value), "Your compiler does not have full support for char32_t" ); #endif typedef BOOST_DEDUCED_TYPENAME boost::detail::deduce_char_traits< char_type, Target, no_cv_src >::type traits; typedef boost::type_traits::ice_and< boost::is_same::value, // source is not a wide character based type boost::type_traits::ice_ne::value, // target type is based on wide character boost::type_traits::ice_not< boost::detail::is_char_or_wchar::value // single character widening is optimized >::value // and does not requires stringbuffer > is_string_widening_required_t; typedef boost::type_traits::ice_not< boost::type_traits::ice_or< boost::is_integral::value, boost::detail::is_this_float_conversion_optimized::value, boost::detail::is_char_or_wchar< BOOST_DEDUCED_TYPENAME deduce_src_char_metafunc::stage1_type // if we did not get character type at stage1 >::value // then we have no optimization for that type >::value > is_source_input_not_optimized_t; // If we have an optimized conversion for // Source, we do not need to construct stringbuf. BOOST_STATIC_CONSTANT(bool, requires_stringbuf = (boost::type_traits::ice_or< is_string_widening_required_t::value, is_source_input_not_optimized_t::value >::value) ); typedef boost::detail::lcast_src_length len_t; }; } namespace detail // '0', '+' and '-' constants { template < typename Char > 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 #if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS) 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 #if !defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS) 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 { template inline BOOST_DEDUCED_TYPENAME make_unsigned::type lcast_to_unsigned(T value) BOOST_NOEXCEPT { typedef BOOST_DEDUCED_TYPENAME boost::make_unsigned::type result_type; return static_cast( value < 0 ? 0u - static_cast(value) : value ); } } 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 { template bool lc_iequal(const CharT* val, const CharT* lcase, const CharT* ucase, unsigned int len) BOOST_NOEXCEPT { for( unsigned int i=0; i < len; ++i ) { if ( val[i] != lcase[i] && val[i] != ucase[i] ) return false; } return true; } /* 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) BOOST_NOEXCEPT { 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( lc_iequal(begin, lc_nan, lc_NAN, 3) ) { 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 && lc_iequal(begin, lc_infinity, lc_INFINITY, 3) ) || ( /* 'INFINITY' or 'infinity' */ end-begin==inifinity_size && lc_iequal(begin, lc_infinity, 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; } template bool put_inf_nan_impl(CharT* begin, CharT*& end, const T& value , const CharT* lc_nan , const CharT* lc_infinity) BOOST_NOEXCEPT { using namespace std; const CharT minus = lcast_char_constants::minus; if ( (boost::math::isnan)(value) ) { if ( (boost::math::signbit)(value) ) { *begin = minus; ++ begin; } memcpy(begin, lc_nan, 3 * sizeof(CharT)); end = begin + 3; return true; } else if ( (boost::math::isinf)(value) ) { if ( (boost::math::signbit)(value) ) { *begin = minus; ++ begin; } memcpy(begin, lc_infinity, 3 * sizeof(CharT)); end = begin + 3; 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) BOOST_NOEXCEPT { return parse_inf_nan_impl(begin, end, value , L"NAN", L"nan" , L"INFINITY", L"infinity" , L'(', L')'); } template bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value) BOOST_NOEXCEPT { return put_inf_nan_impl(begin, end, value, L"nan", L"infinity"); } #endif #if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS) template bool parse_inf_nan(const char16_t* begin, const char16_t* end, T& value) BOOST_NOEXCEPT { return parse_inf_nan_impl(begin, end, value , u"NAN", u"nan" , u"INFINITY", u"infinity" , u'(', u')'); } template bool put_inf_nan(char16_t* begin, char16_t*& end, const T& value) BOOST_NOEXCEPT { return put_inf_nan_impl(begin, end, value, u"nan", u"infinity"); } #endif #if !defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS) template bool parse_inf_nan(const char32_t* begin, const char32_t* end, T& value) BOOST_NOEXCEPT { return parse_inf_nan_impl(begin, end, value , U"NAN", U"nan" , U"INFINITY", U"infinity" , U'(', U')'); } template bool put_inf_nan(char32_t* begin, char32_t*& end, const T& value) BOOST_NOEXCEPT { return put_inf_nan_impl(begin, end, value, U"nan", U"infinity"); } #endif template bool parse_inf_nan(const CharT* begin, const CharT* end, T& value) BOOST_NOEXCEPT { return parse_inf_nan_impl(begin, end, value , "NAN", "nan" , "INFINITY", "infinity" , '(', ')'); } template bool put_inf_nan(CharT* begin, CharT*& end, const T& value) BOOST_NOEXCEPT { return put_inf_nan_impl(begin, end, value, "nan", "infinity"); } } 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 = static_cast(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 (Traits::eq(*begin, minus) ) { ++ begin; has_minus = true; if (begin == end) return false; } else if (Traits::eq(*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 (Traits::eq(*begin, lowercase_e) || Traits::eq(*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 (Traits::eq(*begin, decimal_point) || Traits::eq(*begin, lowercase_e) || Traits::eq(*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(Traits::eq(*begin, decimal_point)) { ++ begin; found_decimal = true; if (!found_number_before_exp && begin==end) return false; continue; }else { if (!found_number_before_exp) return false; break; } } #ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE else if (grouping_size && Traits::eq(*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 && (Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e)) ) { ++ begin; if ( begin == end ) return false; bool exp_has_minus = false; if(Traits::eq(*begin, minus)) { exp_has_minus = true; ++ begin; if ( begin == end ) return false; } else if (Traits::eq(*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_out_stream_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 { #if defined(BOOST_NO_STRINGSTREAM) typedef std::ostrstream out_stream_t; typedef stl_buf_unlocker unlocked_but_t; #elif defined(BOOST_NO_STD_LOCALE) typedef std::ostringstream out_stream_t; typedef stl_buf_unlocker unlocked_but_t; #else typedef std::basic_ostringstream out_stream_t; typedef stl_buf_unlocker, CharT> unlocked_but_t; #endif typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c< RequiresStringbuffer, out_stream_t, do_not_construct_out_stream_t >::type deduced_out_stream_t; // A string representation of Source is written to [start, finish). CharT* start; CharT* finish; deduced_out_stream_t out_stream; 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) BOOST_NOEXCEPT { 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 narrowing of char types." "Use boost::locale instead" ); #ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE std::locale loc; CharT const w = BOOST_USE_FACET(std::ctype, loc).widen(ch); #else CharT const w = static_cast(ch); #endif Traits::assign(*start, w); finish = start + 1; return true; } #endif bool shl_char_array(CharT const* str) BOOST_NOEXCEPT { start = const_cast(str); finish = start + Traits::length(str); return true; } template bool shl_char_array(T const* str) { BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)), "boost::lexical_cast does not support narrowing of char types." "Use boost::locale instead" ); return shl_input_streamable(str); } bool shl_char_array_limited(CharT const* str, std::size_t max_size) BOOST_NOEXCEPT { start = const_cast(str); finish = std::find(start, start + max_size, Traits::to_char_type(0)); return true; } template bool shl_input_streamable(InputStreamable& input) { #if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE) // If you have compilation error at this point, than your STL library // does not support such conversions. Try updating it. BOOST_STATIC_ASSERT((boost::is_same::value)); #endif bool const result = !(out_stream << input).fail(); const unlocked_but_t* const p = static_cast(out_stream.rdbuf()) ; start = p->pbase(); finish = p->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; } template bool shl_real_type(const T& val, SomeCharT* begin, SomeCharT*& end) { if (put_inf_nan(begin, end, val)) return true; lcast_set_precision(out_stream, &val); return shl_input_streamable(val); } static bool shl_real_type(float val, char* begin, char*& end) { using namespace std; if (put_inf_nan(begin, end, val)) return true; const double val_as_double = val; end = begin + #if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) sprintf_s(begin, end-begin, #else sprintf(begin, #endif "%.*g", static_cast(boost::detail::lcast_get_precision()), val_as_double); return end > begin; } static bool shl_real_type(double val, char* begin, char*& end) { using namespace std; if (put_inf_nan(begin, end, val)) return true; end = begin + #if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) sprintf_s(begin, end-begin, #else sprintf(begin, #endif "%.*g", static_cast(boost::detail::lcast_get_precision()), val); return end > begin; } #ifndef __MINGW32__ static bool shl_real_type(long double val, char* begin, char*& end) { using namespace std; if (put_inf_nan(begin, end, val)) return true; end = begin + #if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) sprintf_s(begin, end-begin, #else sprintf(begin, #endif "%.*Lg", static_cast(boost::detail::lcast_get_precision()), val ); return end > begin; } #endif #if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_SWPRINTF) && !defined(__MINGW32__) static bool shl_real_type(float val, wchar_t* begin, wchar_t*& end) { using namespace std; if (put_inf_nan(begin, end, val)) return true; const double val_as_double = val; end = begin + swprintf(begin, end-begin, L"%.*g", static_cast(boost::detail::lcast_get_precision()), val_as_double ); return end > begin; } static bool shl_real_type(double val, wchar_t* begin, wchar_t*& end) { using namespace std; if (put_inf_nan(begin, end, val)) return true; end = begin + swprintf(begin, end-begin, L"%.*g", static_cast(boost::detail::lcast_get_precision()), val ); return end > begin; } static bool shl_real_type(long double val, wchar_t* begin, wchar_t*& end) { using namespace std; if (put_inf_nan(begin, end, val)) return true; end = begin + swprintf(begin, end-begin, L"%.*Lg", static_cast(boost::detail::lcast_get_precision()), val ); return end > begin; } #endif /************************************ OPERATORS << ( ... ) ********************************/ public: template bool operator<<(std::basic_string const& str) BOOST_NOEXCEPT { start = const_cast(str.data()); finish = start + str.length(); return true; } template bool operator<<(boost::container::basic_string const& str) BOOST_NOEXCEPT { start = const_cast(str.data()); finish = start + str.length(); return true; } bool operator<<(bool value) BOOST_NOEXCEPT { CharT const czero = lcast_char_constants::zero; Traits::assign(*start, Traits::to_char_type(czero + value)); finish = start + 1; return true; } bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { start = rng.begin(); finish = rng.end(); return true; } bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { start = const_cast(rng.begin()); finish = const_cast(rng.end()); return true; } bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { return (*this) << iterator_range( const_cast(reinterpret_cast(rng.begin())), const_cast(reinterpret_cast(rng.end())) ); } bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { return (*this) << iterator_range( const_cast(reinterpret_cast(rng.begin())), const_cast(reinterpret_cast(rng.end())) ); } bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { return (*this) << iterator_range( reinterpret_cast(rng.begin()), reinterpret_cast(rng.end()) ); } bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { return (*this) << iterator_range( reinterpret_cast(rng.begin()), reinterpret_cast(rng.end()) ); } 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 #if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS) bool operator<<(char16_t ch) { return shl_char(ch); } bool operator<<(char16_t * str) { return shl_char_array(str); } bool operator<<(char16_t const * str) { return shl_char_array(str); } #endif #if !defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS) bool operator<<(char32_t ch) { return shl_char(ch); } bool operator<<(char32_t * str) { return shl_char_array(str); } bool operator<<(char32_t const * str) { return shl_char_array(str); } #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_real_type(val, start, finish); } bool operator<<(double val) { return shl_real_type(val, start, finish); } bool operator<<(long double val) { #ifndef __MINGW32__ return shl_real_type(val, start, finish); #else return shl_real_type(static_cast(val), start, finish); #endif } template bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return shl_char_array_limited(input.begin(), N); } template bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return shl_char_array_limited(input.begin(), N); } template bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } #ifndef BOOST_NO_CXX11_HDR_ARRAY template bool operator<<(std::array const& input) BOOST_NOEXCEPT { if (input.size()) return shl_char_array_limited(&input[0], N); else return true; } template bool operator<<(std::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template bool operator<<(std::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template bool operator<<(std::array const& input) BOOST_NOEXCEPT { if (input.size()) return shl_char_array_limited(&input[0], N); else return true; } template bool operator<<(std::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template bool operator<<(std::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } #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 (has_minus) { output = static_cast(0u - output); } 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) { utype const comp_val = (static_cast(1) << std::numeric_limits::digits); succeed = succeed && out_tmp<=comp_val; output = static_cast(0u - out_tmp); } 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; #if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE) // If you have compilation error at this point, than your STL library // unsupports such conversions. Try updating it. BOOST_STATIC_ASSERT((boost::is_same::value)); #endif #if defined(BOOST_NO_STRINGSTREAM) std::istrstream stream(start, finish - start); #elif defined(BOOST_NO_STD_LOCALE) std::istringstream stream; #else std::basic_istringstream stream; #endif static_cast(stream.rdbuf()) ->setg(start, start, finish); 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 narrowing of character 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 #if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS) bool operator>>(char16_t& output) { return shr_xchar(output); } #endif #if !defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS) bool operator>>(char32_t& output) { return shr_xchar(output); } #endif template bool operator>>(std::basic_string& str) { str.assign(start, finish); return true; } template bool operator>>(boost::container::basic_string& str) { str.assign(start, finish); return true; } private: template bool shr_std_array(ArrayT& output) BOOST_NOEXCEPT { using namespace std; const std::size_t size = finish - start; if (size > N - 1) { // `-1` because we need to store \0 at the end return false; } memcpy(&output[0], start, size * sizeof(CharT)); output[size] = Traits::to_char_type(0); return true; } public: template bool operator>>(boost::array& output) BOOST_NOEXCEPT { return shr_std_array(output); } template bool operator>>(boost::array& output) { return ((*this) >> reinterpret_cast& >(output)); } template bool operator>>(boost::array& output) { return ((*this) >> reinterpret_cast& >(output)); } #ifndef BOOST_NO_CXX11_HDR_ARRAY template bool operator>>(std::array& output) BOOST_NOEXCEPT { return shr_std_array(output); } template bool operator>>(std::array& output) { return ((*this) >> reinterpret_cast& >(output)); } template bool operator>>(std::array& output) { return ((*this) >> reinterpret_cast& >(output)); } #endif /* * case "-0" || "0" || "+0" : output = false; return true; * case "1" || "+1": output = true; return true; * default: return false; */ bool operator>>(bool& output) BOOST_NOEXCEPT { 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 && ( Traits::eq(*(finish-1), lowercase_e) // 1.0e || Traits::eq(*(finish-1), capital_e) // 1.0E || Traits::eq(*(finish-1), minus) // 1.0e- or 1.0E- || Traits::eq(*(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); } }; } namespace detail { template struct is_stdstring { BOOST_STATIC_CONSTANT(bool, value = false ); }; template struct is_stdstring< std::basic_string > { BOOST_STATIC_CONSTANT(bool, value = true ); }; template struct is_stdstring< boost::container::basic_string > { BOOST_STATIC_CONSTANT(bool, value = true ); }; template struct is_arithmetic_and_not_xchars { BOOST_STATIC_CONSTANT(bool, value = ( boost::type_traits::ice_and< boost::is_arithmetic::value, boost::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 ); }; 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 ); }; #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 lexical_cast_stream_traits stream_trait; typedef detail::lexical_stream_limited_src< BOOST_DEDUCED_TYPENAME stream_trait::char_type, BOOST_DEDUCED_TYPENAME stream_trait::traits, stream_trait::requires_stringbuf > interpreter_type; // Target type must be default constructible Target result; BOOST_DEDUCED_TYPENAME stream_trait::char_type buf[stream_trait::len_t::value + 1]; stream_trait::len_t::check_coverage(); interpreter_type interpreter(buf, buf + stream_trait::len_t::value + 1); // 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 const Source& lexical_cast_impl(const Source &arg) BOOST_NOEXCEPT { return arg; } }; template struct detect_precision_loss { typedef boost::numeric::Trunc Rounder; typedef Source source_type ; typedef BOOST_DEDUCED_TYPENAME mpl::if_< boost::is_arithmetic, Source, Source const& >::type argument_type ; static source_type nearbyint ( argument_type s ) { const source_type near_int = Rounder::nearbyint(s); if (near_int) { const source_type orig_div_round = s / near_int; const source_type eps = std::numeric_limits::epsilon(); if ((orig_div_round > 1 ? orig_div_round - 1 : 1 - orig_div_round) > eps) BOOST_LCAST_THROW_BAD_CAST(Source, Target); } return s ; } typedef typename Rounder::round_style round_style; } ; template struct nothrow_overflow_handler { void operator() ( boost::numeric::range_check_result r ) { if (r != boost::numeric::cInRange) BOOST_LCAST_THROW_BAD_CAST(Source, Target); } } ; template struct lexical_cast_dynamic_num_not_ignoring_minus { static inline Target lexical_cast_impl(const Source &arg) { return boost::numeric::converter< Target, Source, boost::numeric::conversion_traits, nothrow_overflow_handler, detect_precision_loss >::convert(arg); } }; template struct lexical_cast_dynamic_num_ignoring_minus { static inline Target lexical_cast_impl(const Source &arg) { typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if_c< boost::is_float::value, boost::mpl::identity, boost::make_unsigned >::type usource_t; typedef boost::numeric::converter< Target, usource_t, boost::numeric::conversion_traits, nothrow_overflow_handler, detect_precision_loss > converter_t; return ( arg < 0 ? 0u - converter_t::convert(0u - arg) : converter_t::convert(arg) ); } }; /* * 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< boost::is_same::value >::value, boost::type_traits::ice_not< boost::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 boost::detail::array_to_pointer_decay::type src; typedef BOOST_DEDUCED_TYPENAME boost::type_traits::ice_or< boost::detail::is_xchar_to_xchar::value, boost::detail::is_char_array_to_stdstring::value, boost::type_traits::ice_and< boost::is_same::value, boost::detail::is_stdstring::value >::value > shall_we_copy_t; typedef BOOST_DEDUCED_TYPENAME boost::detail::is_arithmetic_and_not_xchars shall_we_copy_with_dynamic_check_t; typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c< shall_we_copy_t::value, boost::detail::lexical_cast_copy, BOOST_DEDUCED_TYPENAME boost::mpl::if_c< shall_we_copy_with_dynamic_check_t::value, boost::detail::lexical_cast_dynamic_num, boost::detail::lexical_cast_do_cast >::type >::type caster_type; return caster_type::lexical_cast_impl(arg); } template inline Target lexical_cast(const CharType* chars, std::size_t count) { BOOST_STATIC_ASSERT_MSG(boost::detail::is_char_or_wchar::value, "CharType must be a character or wide character type"); return boost::lexical_cast( boost::iterator_range(chars, chars + count) ); } } // namespace boost #else // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION namespace boost { namespace detail { // selectors for choosing stream character type template struct stream_char { typedef char type; }; #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; }; template<> struct stream_char { typedef wchar_t type; }; #endif // 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; } } // namespace boost #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_THROW_BAD_CAST #undef BOOST_LCAST_NO_WCHAR_T #endif // BOOST_LEXICAL_CAST_INCLUDED limits.hpp000444000765000024 1417112161110644 20321 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost // (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 make_shared.hpp000444000765000024 76512161110676 21234 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 math_fwd.hpp000444000765000024 511312161110645 20566 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// Boost math_fwd.hpp header file ------------------------------------------// // (C) Copyright Hubert Holin and Daryle Walker 2001-2002. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/math for documentation. #ifndef BOOST_MATH_FWD_HPP #define BOOST_MATH_FWD_HPP #include namespace boost { namespace math { // From ----------------------------------------// template < typename T > class quaternion; template < > class quaternion< float >; template < > class quaternion< double >; template < > class quaternion< long double >; // Also has many function templates (including operators) // From ------------------------------------------// template < typename T > class octonion; template < > class octonion< float >; template < > class octonion< double >; template < > class octonion< long double >; // Also has many function templates (including operators) // From ---------------------------// // Only has function template // From ---------------------------// // Only has function template // From ---------------------------// // Only has function template // From ----------------------------// // Only has function templates // From ---------------------------// // Only has function templates // From -------------------------------------// // Only #includes other headers // From ----------------------------------// #ifdef BOOST_NO_INTEGRAL_INT64_T typedef unsigned long static_gcd_type; #else typedef boost::uintmax_t static_gcd_type; #endif template < static_gcd_type Value1, static_gcd_type Value2 > struct static_gcd; template < static_gcd_type Value1, static_gcd_type Value2 > struct static_lcm; // From ----------------------------------// template < typename IntegerType > class gcd_evaluator; template < typename IntegerType > class lcm_evaluator; // Also has a couple of function templates } // namespace math } // namespace boost #endif // BOOST_MATH_FWD_HPP mem_fn.hpp000444000765000024 115412161110655 20240 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 memory_order.hpp000444000765000024 245612161110667 21513 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 mpi.hpp000444000765000024 216012161110613 17554 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// Copyright (C) 2006 Douglas Gregor . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Message Passing Interface // See www.boost.org/libs/mpi for documentation. /** @file mpi.hpp * * This file is a top-level convenience header that includes all of * the Boost.MPI library headers. Users concerned about compile time * may wish to include only specific headers from the Boost.MPI * library. * */ #ifndef BOOST_MPI_HPP #define BOOST_MPI_HPP #include #include #include #include #include #include #include #include #include #include #include #include #endif // BOOST_MPI_HPP multi_index_container.hpp000444000765000024 10353012161110631 23415 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/* Multiply indexed container. * * Copyright 2003-2011 Joaquin M Lopez Munoz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See http://www.boost.org/libs/multi_index for library home page. */ #ifndef BOOST_MULTI_INDEX_HPP #define BOOST_MULTI_INDEX_HPP #if defined(_MSC_VER)&&(_MSC_VER>=1200) #pragma once #endif #include /* keep it first to prevent nasty warns in MSVC */ #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(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION) #include #include #include #include #include #include #include #endif #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING) #include #define BOOST_MULTI_INDEX_CHECK_INVARIANT \ detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \ detail::make_obj_guard(*this,&multi_index_container::check_invariant_); \ BOOST_JOIN(check_invariant_,__LINE__).touch(); #else #define BOOST_MULTI_INDEX_CHECK_INVARIANT #endif namespace boost{ namespace multi_index{ template class multi_index_container: private ::boost::base_from_member< typename boost::detail::allocator::rebind_to< Allocator, typename detail::multi_index_node_type< Value,IndexSpecifierList,Allocator>::type >::type>, BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS detail::header_holder< typename detail::prevent_eti< Allocator, typename boost::detail::allocator::rebind_to< Allocator, typename detail::multi_index_node_type< Value,IndexSpecifierList,Allocator>::type >::type >::type::pointer, multi_index_container >, public detail::multi_index_base_type< Value,IndexSpecifierList,Allocator>::type { #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\ BOOST_WORKAROUND(__MWERKS__,<=0x3003) /* The "ISO C++ Template Parser" option in CW8.3 has a problem with the * lifetime of const references bound to temporaries --precisely what * scopeguards are. */ #pragma parse_mfunc_templ off #endif private: #if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) template friend class detail::index_base; template friend struct detail::header_holder; template friend struct detail::converter; #endif typedef typename detail::multi_index_base_type< Value,IndexSpecifierList,Allocator>::type super; typedef typename boost::detail::allocator::rebind_to< Allocator, typename super::node_type >::type node_allocator; typedef ::boost::base_from_member< node_allocator> bfm_allocator; typedef detail::header_holder< typename detail::prevent_eti< Allocator, node_allocator >::type::pointer, multi_index_container> bfm_header; #if BOOST_WORKAROUND(BOOST_MSVC,<1300) /* see definition of index_type_list below */ typedef typename super::index_type_list super_index_type_list; #endif public: /* All types are inherited from super, a few are explicitly * brought forward here to save us some typename's. */ typedef typename super::ctor_args_list ctor_args_list; typedef IndexSpecifierList index_specifier_type_list; #if BOOST_WORKAROUND(BOOST_MSVC,<1300) /* MSVC++ 6.0 chokes on moderately long index lists (around 6 indices * or more), with errors ranging from corrupt exes to duplicate * comdats. The following type hiding hack alleviates this condition; * best results combined with type hiding of the indexed_by construct * itself, as explained in the "Compiler specifics" section of * the documentation. */ struct index_type_list:super_index_type_list { typedef index_type_list type; typedef typename super_index_type_list::back back; typedef mpl::v_iter begin; typedef mpl::v_iter< type, mpl::size::value> end; }; #else typedef typename super::index_type_list index_type_list; #endif typedef typename super::iterator_type_list iterator_type_list; typedef typename super::const_iterator_type_list const_iterator_type_list; typedef typename super::value_type value_type; typedef typename super::final_allocator_type allocator_type; typedef typename super::iterator iterator; typedef typename super::const_iterator const_iterator; BOOST_STATIC_ASSERT( detail::no_duplicate_tags_in_index_list::value); /* global project() needs to see this publicly */ typedef typename super::node_type node_type; /* construct/copy/destroy */ explicit multi_index_container( #if BOOST_WORKAROUND(__IBMCPP__,<=600) /* VisualAge seems to have an ETI issue with the default values * for arguments args_list and al. */ const ctor_args_list& args_list= typename mpl::identity::type:: ctor_args_list(), const allocator_type& al= typename mpl::identity::type:: allocator_type()): #else const ctor_args_list& args_list=ctor_args_list(), const allocator_type& al=allocator_type()): #endif bfm_allocator(al), super(args_list,bfm_allocator::member), node_count(0) { BOOST_MULTI_INDEX_CHECK_INVARIANT; } explicit multi_index_container(const allocator_type& al): bfm_allocator(al), super(ctor_args_list(),bfm_allocator::member), node_count(0) { BOOST_MULTI_INDEX_CHECK_INVARIANT; } template multi_index_container( InputIterator first,InputIterator last, #if BOOST_WORKAROUND(__IBMCPP__,<=600) /* VisualAge seems to have an ETI issue with the default values * for arguments args_list and al. */ const ctor_args_list& args_list= typename mpl::identity::type:: ctor_args_list(), const allocator_type& al= typename mpl::identity::type:: allocator_type()): #else const ctor_args_list& args_list=ctor_args_list(), const allocator_type& al=allocator_type()): #endif bfm_allocator(al), super(args_list,bfm_allocator::member), node_count(0) { BOOST_MULTI_INDEX_CHECK_INVARIANT; BOOST_TRY{ iterator hint=super::end(); for(;first!=last;++first){ hint=super::make_iterator(insert_(*first,hint.get_node()).first); } } BOOST_CATCH(...){ clear_(); BOOST_RETHROW; } BOOST_CATCH_END } multi_index_container( const multi_index_container& x): bfm_allocator(x.bfm_allocator::member), bfm_header(), super(x), node_count(0) { copy_map_type map(bfm_allocator::member,x.size(),x.header(),header()); for(const_iterator it=x.begin(),it_end=x.end();it!=it_end;++it){ map.clone(it.get_node()); } super::copy_(x,map); map.release(); node_count=x.size(); /* Not until this point are the indices required to be consistent, * hence the position of the invariant checker. */ BOOST_MULTI_INDEX_CHECK_INVARIANT; } ~multi_index_container() { delete_all_nodes_(); } multi_index_container& operator=( multi_index_container x) { BOOST_MULTI_INDEX_CHECK_INVARIANT; this->swap(x); return *this; } allocator_type get_allocator()const { return allocator_type(bfm_allocator::member); } /* retrieval of indices by number */ #if !defined(BOOST_NO_MEMBER_TEMPLATES) template struct nth_index { BOOST_STATIC_ASSERT(N>=0&&N::type::value); typedef typename mpl::at_c::type type; }; template typename nth_index::type& get(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int,N)) { BOOST_STATIC_ASSERT(N>=0&&N::type::value); return *this; } template const typename nth_index::type& get( BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int,N))const { BOOST_STATIC_ASSERT(N>=0&&N::type::value); return *this; } #endif /* retrieval of indices by tag */ #if !defined(BOOST_NO_MEMBER_TEMPLATES) template struct index { typedef typename mpl::find_if< index_type_list, detail::has_tag >::type iter; BOOST_STATIC_CONSTANT( bool,index_found=!(is_same::type >::value)); BOOST_STATIC_ASSERT(index_found); typedef typename mpl::deref::type type; }; template typename index::type& get(BOOST_EXPLICIT_TEMPLATE_TYPE(Tag)) { return *this; } template const typename index::type& get( BOOST_EXPLICIT_TEMPLATE_TYPE(Tag))const { return *this; } #endif /* projection of iterators by number */ #if !defined(BOOST_NO_MEMBER_TEMPLATES) template struct nth_index_iterator { typedef typename nth_index::type::iterator type; }; template struct nth_index_const_iterator { typedef typename nth_index::type::const_iterator type; }; template typename nth_index_iterator::type project( IteratorType it BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N)) { typedef typename nth_index::type index; #if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */ BOOST_STATIC_ASSERT( (mpl::contains::value)); #endif BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it); BOOST_MULTI_INDEX_CHECK_IS_OWNER( it,static_cast(*this)); return index::make_iterator(static_cast(it.get_node())); } template typename nth_index_const_iterator::type project( IteratorType it BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))const { typedef typename nth_index::type index; #if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */ BOOST_STATIC_ASSERT(( mpl::contains::value|| mpl::contains::value)); #endif BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it); BOOST_MULTI_INDEX_CHECK_IS_OWNER( it,static_cast(*this)); return index::make_iterator(static_cast(it.get_node())); } #endif /* projection of iterators by tag */ #if !defined(BOOST_NO_MEMBER_TEMPLATES) template struct index_iterator { typedef typename index::type::iterator type; }; template struct index_const_iterator { typedef typename index::type::const_iterator type; }; template typename index_iterator::type project( IteratorType it BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag)) { typedef typename index::type index; #if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */ BOOST_STATIC_ASSERT( (mpl::contains::value)); #endif BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it); BOOST_MULTI_INDEX_CHECK_IS_OWNER( it,static_cast(*this)); return index::make_iterator(static_cast(it.get_node())); } template typename index_const_iterator::type project( IteratorType it BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))const { typedef typename index::type index; #if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */ BOOST_STATIC_ASSERT(( mpl::contains::value|| mpl::contains::value)); #endif BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it); BOOST_MULTI_INDEX_CHECK_IS_OWNER( it,static_cast(*this)); return index::make_iterator(static_cast(it.get_node())); } #endif BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS: typedef typename super::copy_map_type copy_map_type; node_type* header()const { return &*bfm_header::member; } node_type* allocate_node() { return &*bfm_allocator::member.allocate(1); } void deallocate_node(node_type* x) { typedef typename node_allocator::pointer node_pointer; bfm_allocator::member.deallocate(static_cast(x),1); } bool empty_()const { return node_count==0; } std::size_t size_()const { return node_count; } std::size_t max_size_()const { return static_cast(-1); } std::pair insert_(const Value& v) { node_type* x=allocate_node(); BOOST_TRY{ node_type* res=super::insert_(v,x); if(res==x){ ++node_count; return std::pair(res,true); } else{ deallocate_node(x); return std::pair(res,false); } } BOOST_CATCH(...){ deallocate_node(x); BOOST_RETHROW; } BOOST_CATCH_END } std::pair insert_(const Value& v,node_type* position) { node_type* x=allocate_node(); BOOST_TRY{ node_type* res=super::insert_(v,position,x); if(res==x){ ++node_count; return std::pair(res,true); } else{ deallocate_node(x); return std::pair(res,false); } } BOOST_CATCH(...){ deallocate_node(x); BOOST_RETHROW; } BOOST_CATCH_END } void erase_(node_type* x) { --node_count; super::erase_(x); deallocate_node(x); } void delete_node_(node_type* x) { super::delete_node_(x); deallocate_node(x); } void delete_all_nodes_() { super::delete_all_nodes_(); } void clear_() { delete_all_nodes_(); super::clear_(); node_count=0; } void swap_(multi_index_container& x) { if(bfm_allocator::member!=x.bfm_allocator::member){ detail::adl_swap(bfm_allocator::member,x.bfm_allocator::member); } std::swap(bfm_header::member,x.bfm_header::member); super::swap_(x); std::swap(node_count,x.node_count); } bool replace_(const Value& k,node_type* x) { return super::replace_(k,x); } template bool modify_(Modifier& mod,node_type* x) { mod(const_cast(x->value())); BOOST_TRY{ if(!super::modify_(x)){ deallocate_node(x); --node_count; return false; } else return true; } BOOST_CATCH(...){ deallocate_node(x); --node_count; BOOST_RETHROW; } BOOST_CATCH_END } template bool modify_(Modifier& mod,Rollback& back,node_type* x) { mod(const_cast(x->value())); bool b; BOOST_TRY{ b=super::modify_rollback_(x); } BOOST_CATCH(...){ BOOST_TRY{ back(const_cast(x->value())); BOOST_RETHROW; } BOOST_CATCH(...){ this->erase_(x); BOOST_RETHROW; } BOOST_CATCH_END } BOOST_CATCH_END BOOST_TRY{ if(!b){ back(const_cast(x->value())); return false; } else return true; } BOOST_CATCH(...){ this->erase_(x); BOOST_RETHROW; } BOOST_CATCH_END } #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION) /* serialization */ friend class boost::serialization::access; BOOST_SERIALIZATION_SPLIT_MEMBER() typedef typename super::index_saver_type index_saver_type; typedef typename super::index_loader_type index_loader_type; template void save(Archive& ar,const unsigned int version)const { #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) const serialization::collection_size_type s(size_()); const detail::serialization_version value_version; ar< void load(Archive& ar,const unsigned int version) { BOOST_MULTI_INDEX_CHECK_INVARIANT; clear_(); #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) serialization::collection_size_type s; detail::serialization_version value_version; if(version<1){ std::size_t sz; ar>>serialization::make_nvp("count",sz); s=static_cast(sz); } else{ ar>>serialization::make_nvp("count",s); } if(version<2){ value_version=0; } else{ ar>>serialization::make_nvp("value_version",value_version); } #else std::size_t s; unsigned int value_version=0; ar>>serialization::make_nvp("count",s); #endif index_loader_type lm(bfm_allocator::member,s); for(std::size_t n=0;n value("item",ar,value_version); std::pair p=insert_( value.get(),super::end().get_node()); if(!p.second)throw_exception( archive::archive_exception( archive::archive_exception::other_exception)); ar.reset_object_address(&p.first->value(),&value.get()); lm.add(p.first,ar,version); } lm.add_track(header(),ar,version); super::load_(ar,version,lm); } #endif #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING) /* invariant stuff */ bool invariant_()const { return super::invariant_(); } void check_invariant_()const { BOOST_MULTI_INDEX_INVARIANT_ASSERT(invariant_()); } #endif private: std::size_t node_count; #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\ BOOST_WORKAROUND(__MWERKS__,<=0x3003) #pragma parse_mfunc_templ reset #endif }; /* retrieval of indices by number */ template struct nth_index { BOOST_STATIC_CONSTANT( int, M=mpl::size::type::value); BOOST_STATIC_ASSERT(N>=0&&N::type type; }; template typename nth_index< multi_index_container,N>::type& get( multi_index_container& m BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N)) { typedef multi_index_container< Value,IndexSpecifierList,Allocator> multi_index_type; typedef typename nth_index< multi_index_container< Value,IndexSpecifierList,Allocator>, N >::type index; BOOST_STATIC_ASSERT(N>=0&& N< mpl::size< BOOST_DEDUCED_TYPENAME multi_index_type::index_type_list >::type::value); return detail::converter::index(m); } template const typename nth_index< multi_index_container,N>::type& get( const multi_index_container& m BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N)) { typedef multi_index_container< Value,IndexSpecifierList,Allocator> multi_index_type; typedef typename nth_index< multi_index_container< Value,IndexSpecifierList,Allocator>, N >::type index; BOOST_STATIC_ASSERT(N>=0&& N< mpl::size< BOOST_DEDUCED_TYPENAME multi_index_type::index_type_list >::type::value); return detail::converter::index(m); } /* retrieval of indices by tag */ template struct index { typedef typename MultiIndexContainer::index_type_list index_type_list; typedef typename mpl::find_if< index_type_list, detail::has_tag >::type iter; BOOST_STATIC_CONSTANT( bool,index_found=!(is_same::type >::value)); BOOST_STATIC_ASSERT(index_found); typedef typename mpl::deref::type type; }; template< typename Tag,typename Value,typename IndexSpecifierList,typename Allocator > typename ::boost::multi_index::index< multi_index_container,Tag>::type& get( multi_index_container& m BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag)) { typedef multi_index_container< Value,IndexSpecifierList,Allocator> multi_index_type; typedef typename ::boost::multi_index::index< multi_index_container< Value,IndexSpecifierList,Allocator>, Tag >::type index; return detail::converter::index(m); } template< typename Tag,typename Value,typename IndexSpecifierList,typename Allocator > const typename ::boost::multi_index::index< multi_index_container,Tag>::type& get( const multi_index_container& m BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag)) { typedef multi_index_container< Value,IndexSpecifierList,Allocator> multi_index_type; typedef typename ::boost::multi_index::index< multi_index_container< Value,IndexSpecifierList,Allocator>, Tag >::type index; return detail::converter::index(m); } /* projection of iterators by number */ template struct nth_index_iterator { typedef typename detail::prevent_eti< nth_index, typename nth_index::type>::type::iterator type; }; template struct nth_index_const_iterator { typedef typename detail::prevent_eti< nth_index, typename nth_index::type >::type::const_iterator type; }; template< int N,typename IteratorType, typename Value,typename IndexSpecifierList,typename Allocator> typename nth_index_iterator< multi_index_container,N>::type project( multi_index_container& m, IteratorType it BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N)) { typedef multi_index_container< Value,IndexSpecifierList,Allocator> multi_index_type; typedef typename nth_index::type index; #if (!defined(BOOST_MSVC)||!(BOOST_MSVC<1310))&& /* MSVC++ 6.0/7.0 fails */\ (!defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580)) /* as does Sun C++ 5.7 */ BOOST_STATIC_ASSERT(( mpl::contains< BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list, IteratorType>::value)); #endif BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it); #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE) typedef detail::converter< multi_index_type, BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter; BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m)); #endif return detail::converter::iterator( m,static_cast(it.get_node())); } template< int N,typename IteratorType, typename Value,typename IndexSpecifierList,typename Allocator> typename nth_index_const_iterator< multi_index_container,N>::type project( const multi_index_container& m, IteratorType it BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N)) { typedef multi_index_container< Value,IndexSpecifierList,Allocator> multi_index_type; typedef typename nth_index::type index; #if (!defined(BOOST_MSVC)||!(BOOST_MSVC<1310))&& /* MSVC++ 6.0/7.0 fails */\ (!defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580)) /* as does Sun C++ 5.7 */ BOOST_STATIC_ASSERT(( mpl::contains< BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list, IteratorType>::value|| mpl::contains< BOOST_DEDUCED_TYPENAME multi_index_type::const_iterator_type_list, IteratorType>::value)); #endif BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it); #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE) typedef detail::converter< multi_index_type, BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter; BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m)); #endif return detail::converter::const_iterator( m,static_cast(it.get_node())); } /* projection of iterators by tag */ template struct index_iterator { typedef typename ::boost::multi_index::index< MultiIndexContainer,Tag>::type::iterator type; }; template struct index_const_iterator { typedef typename ::boost::multi_index::index< MultiIndexContainer,Tag>::type::const_iterator type; }; template< typename Tag,typename IteratorType, typename Value,typename IndexSpecifierList,typename Allocator> typename index_iterator< multi_index_container,Tag>::type project( multi_index_container& m, IteratorType it BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag)) { typedef multi_index_container< Value,IndexSpecifierList,Allocator> multi_index_type; typedef typename ::boost::multi_index::index< multi_index_type,Tag>::type index; #if (!defined(BOOST_MSVC)||!(BOOST_MSVC<1310))&& /* MSVC++ 6.0/7.0 fails */\ (!defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580)) /* as does Sun C++ 5.7 */ BOOST_STATIC_ASSERT(( mpl::contains< BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list, IteratorType>::value)); #endif BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it); #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE) typedef detail::converter< multi_index_type, BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter; BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m)); #endif return detail::converter::iterator( m,static_cast(it.get_node())); } template< typename Tag,typename IteratorType, typename Value,typename IndexSpecifierList,typename Allocator> typename index_const_iterator< multi_index_container,Tag>::type project( const multi_index_container& m, IteratorType it BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag)) { typedef multi_index_container< Value,IndexSpecifierList,Allocator> multi_index_type; typedef typename ::boost::multi_index::index< multi_index_type,Tag>::type index; #if (!defined(BOOST_MSVC)||!(BOOST_MSVC<1310))&& /* MSVC++ 6.0/7.0 fails */\ (!defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580)) /* as does Sun C++ 5.7 */ BOOST_STATIC_ASSERT(( mpl::contains< BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list, IteratorType>::value|| mpl::contains< BOOST_DEDUCED_TYPENAME multi_index_type::const_iterator_type_list, IteratorType>::value)); #endif BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it); #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE) typedef detail::converter< multi_index_type, BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter; BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m)); #endif return detail::converter::const_iterator( m,static_cast(it.get_node())); } /* Comparison. Simple forward to first index. */ template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator==( const multi_index_container& x, const multi_index_container& y) { return get<0>(x)==get<0>(y); } template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator<( const multi_index_container& x, const multi_index_container& y) { return get<0>(x)(y); } template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator!=( const multi_index_container& x, const multi_index_container& y) { return get<0>(x)!=get<0>(y); } template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator>( const multi_index_container& x, const multi_index_container& y) { return get<0>(x)>get<0>(y); } template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator>=( const multi_index_container& x, const multi_index_container& y) { return get<0>(x)>=get<0>(y); } template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator<=( const multi_index_container& x, const multi_index_container& y) { return get<0>(x)<=get<0>(y); } /* specialized algorithms */ template void swap( multi_index_container& x, multi_index_container& y) { x.swap(y); } } /* namespace multi_index */ #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)&&\ !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) /* class version = 1 : we now serialize the size through * boost::serialization::collection_size_type. * class version = 2 : proper use of {save|load}_construct_data. */ namespace serialization { template struct version< boost::multi_index_container > { BOOST_STATIC_CONSTANT(int,value=2); }; } /* namespace serialization */ #endif /* Associated global functions are promoted to namespace boost, except * comparison operators and swap, which are meant to be Koenig looked-up. */ using multi_index::get; using multi_index::project; } /* namespace boost */ #undef BOOST_MULTI_INDEX_CHECK_INVARIANT #endif multi_index_container_fwd.hpp000444000765000024 751312161110675 24231 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/* Copyright 2003-2008 Joaquin M Lopez Munoz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See http://www.boost.org/libs/multi_index for library home page. */ #ifndef BOOST_MULTI_INDEX_FWD_HPP #define BOOST_MULTI_INDEX_FWD_HPP #if defined(_MSC_VER)&&(_MSC_VER>=1200) #pragma once #endif #include /* keep it first to prevent nasty warns in MSVC */ #include #include #include #include namespace boost{ namespace multi_index{ /* Default value for IndexSpecifierList specifies a container * equivalent to std::set. */ template< typename Value, typename IndexSpecifierList=indexed_by > >, typename Allocator=std::allocator > class multi_index_container; template struct nth_index; template struct index; template struct nth_index_iterator; template struct nth_index_const_iterator; template struct index_iterator; template struct index_const_iterator; /* get and project functions not fwd declared due to problems * with dependent typenames */ template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator==( const multi_index_container& x, const multi_index_container& y); template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator<( const multi_index_container& x, const multi_index_container& y); template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator!=( const multi_index_container& x, const multi_index_container& y); template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator>( const multi_index_container& x, const multi_index_container& y); template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator>=( const multi_index_container& x, const multi_index_container& y); template< typename Value1,typename IndexSpecifierList1,typename Allocator1, typename Value2,typename IndexSpecifierList2,typename Allocator2 > bool operator<=( const multi_index_container& x, const multi_index_container& y); template void swap( multi_index_container& x, multi_index_container& y); } /* namespace multi_index */ /* multi_index_container, being the main type of this library, is promoted to * namespace boost. */ using multi_index::multi_index_container; } /* namespace boost */ #endif next_prior.hpp000444000765000024 250312161110646 21167 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 non_type.hpp000444000765000024 120612161110640 20622 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// ------------------------------------- // // (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 noncopyable.hpp000444000765000024 203212161110641 21277 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 none.hpp000444000765000024 144112161110650 17730 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 none_t.hpp000444000765000024 116512161110700 20252 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 operators.hpp000444000765000024 11556412161110676 21073 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 optional.hpp000444000765000024 104212161110652 20615 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 pointee.hpp000444000765000024 354712161110620 20442 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#ifndef POINTEE_DWA200415_HPP # define POINTEE_DWA200415_HPP // // Copyright David Abrahams 2004. Use, modification and distribution is // subject to the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // typename pointee

::type provides the pointee type of P. // // For example, it is T for T* and X for shared_ptr. // // http://www.boost.org/libs/iterator/doc/pointee.html // # include # include # include # include # include # include namespace boost { namespace detail { template struct smart_ptr_pointee { typedef typename P::element_type type; }; template struct iterator_pointee { typedef typename iterator_traits::value_type value_type; struct impl { template static char test(T const&); static char (& test(value_type&) )[2]; static Iterator& x; }; BOOST_STATIC_CONSTANT(bool, is_constant = sizeof(impl::test(*impl::x)) == 1); typedef typename mpl::if_c< # if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) ::boost::detail::iterator_pointee::is_constant # else is_constant # endif , typename add_const::type , value_type >::type type; }; } template struct pointee : mpl::eval_if< detail::is_incrementable

, detail::iterator_pointee

, detail::smart_ptr_pointee

> { }; } // namespace boost #endif // POINTEE_DWA200415_HPP pointer_to_other.hpp000444000765000024 234612161110601 22355 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#ifndef BOOST_POINTER_TO_OTHER_HPP_INCLUDED #define BOOST_POINTER_TO_OTHER_HPP_INCLUDED // // pointer_to_other.hpp // // (C) Copyright Ion Gaztanaga 2005. // Copyright (c) 2005 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/smart_ptr/pointer_to_other.html // namespace boost { // Defines the same pointer type (raw or smart) to another pointee type template struct pointer_to_other; template class Sp> struct pointer_to_other< Sp, U > { typedef Sp type; }; template class Sp> struct pointer_to_other< Sp, U > { typedef Sp type; }; template class Sp> struct pointer_to_other< Sp, U > { typedef Sp type; }; template struct pointer_to_other< T*, U > { typedef U* type; }; } // namespace boost #endif // #ifndef BOOST_POINTER_TO_OTHER_HPP_INCLUDED preprocessor.hpp000444000765000024 77112161110664 21511 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost# /* Copyright (C) 2001 # * Housemarque Oy # * http://www.housemarque.com # * # * Distributed under the Boost Software License, Version 1.0. (See # * accompanying file LICENSE_1_0.txt or copy at # * http://www.boost.org/LICENSE_1_0.txt) # */ # # /* Revised by Paul Mensonides (2002) */ # # /* See http://www.boost.org/libs/preprocessor for documentation. */ # # ifndef BOOST_PREPROCESSOR_HPP # define BOOST_PREPROCESSOR_HPP # # include # # endif program_options.hpp000444000765000024 151412161110641 22214 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 progress.hpp000444000765000024 1302512161110676 20666 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// boost progress.hpp header file ------------------------------------------// // Copyright Beman Dawes 1994-99. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/timer for documentation. // Revision History // 1 Dec 01 Add leading progress display strings (suggested by Toon Knapen) // 20 May 01 Introduce several static_casts<> to eliminate warning messages // (Fixed by Beman, reported by Herve Bronnimann) // 12 Jan 01 Change to inline implementation to allow use without library // builds. See docs for more rationale. (Beman Dawes) // 22 Jul 99 Name changed to .hpp // 16 Jul 99 Second beta // 6 Jul 99 Initial boost version #ifndef BOOST_PROGRESS_HPP #define BOOST_PROGRESS_HPP #include #include // for noncopyable #include // for uintmax_t #include // for ostream, cout, etc #include // for string namespace boost { // progress_timer ----------------------------------------------------------// // A progress_timer behaves like a timer except that the destructor displays // an elapsed time message at an appropriate place in an appropriate form. class progress_timer : public timer, private noncopyable { public: explicit progress_timer( std::ostream & os = std::cout ) // os is hint; implementation may ignore, particularly in embedded systems : m_os(os) {} ~progress_timer() { // A) Throwing an exception from a destructor is a Bad Thing. // B) The progress_timer destructor does output which may throw. // C) A progress_timer is usually not critical to the application. // Therefore, wrap the I/O in a try block, catch and ignore all exceptions. try { // use istream instead of ios_base to workaround GNU problem (Greg Chicares) std::istream::fmtflags old_flags = m_os.setf( std::istream::fixed, std::istream::floatfield ); std::streamsize old_prec = m_os.precision( 2 ); m_os << elapsed() << " s\n" // "s" is System International d'Unites std << std::endl; m_os.flags( old_flags ); m_os.precision( old_prec ); } catch (...) {} // eat any exceptions } // ~progress_timer private: std::ostream & m_os; }; // progress_display --------------------------------------------------------// // progress_display displays an appropriate indication of // progress at an appropriate place in an appropriate form. // NOTE: (Jan 12, 2001) Tried to change unsigned long to boost::uintmax_t, but // found some compilers couldn't handle the required conversion to double. // Reverted to unsigned long until the compilers catch up. class progress_display : private noncopyable { public: explicit progress_display( unsigned long expected_count, std::ostream & os = std::cout, const std::string & s1 = "\n", //leading strings const std::string & s2 = "", const std::string & s3 = "" ) // os is hint; implementation may ignore, particularly in embedded systems : m_os(os), m_s1(s1), m_s2(s2), m_s3(s3) { restart(expected_count); } void restart( unsigned long expected_count ) // Effects: display appropriate scale // Postconditions: count()==0, expected_count()==expected_count { _count = _next_tic_count = _tic = 0; _expected_count = expected_count; m_os << m_s1 << "0% 10 20 30 40 50 60 70 80 90 100%\n" << m_s2 << "|----|----|----|----|----|----|----|----|----|----|" << std::endl // endl implies flush, which ensures display << m_s3; if ( !_expected_count ) _expected_count = 1; // prevent divide by zero } // restart unsigned long operator+=( unsigned long increment ) // Effects: Display appropriate progress tic if needed. // Postconditions: count()== original count() + increment // Returns: count(). { if ( (_count += increment) >= _next_tic_count ) { display_tic(); } return _count; } unsigned long operator++() { return operator+=( 1 ); } unsigned long count() const { return _count; } unsigned long expected_count() const { return _expected_count; } private: std::ostream & m_os; // may not be present in all imps const std::string m_s1; // string is more general, safer than const std::string m_s2; // const char *, and efficiency or size are const std::string m_s3; // not issues unsigned long _count, _expected_count, _next_tic_count; unsigned int _tic; void display_tic() { // use of floating point ensures that both large and small counts // work correctly. static_cast<>() is also used several places // to suppress spurious compiler warnings. unsigned int tics_needed = static_cast( (static_cast(_count)/_expected_count)*50.0 ); do { m_os << '*' << std::flush; } while ( ++_tic < tics_needed ); _next_tic_count = static_cast((_tic/50.0)*_expected_count); if ( _count == _expected_count ) { if ( _tic < 51 ) m_os << '*'; m_os << std::endl; } } // display_tic }; } // namespace boost #endif // BOOST_PROGRESS_HPP python.hpp000444000765000024 557512161110672 20332 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// Copyright David Abrahams 2002. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/python for documentation. #ifndef PYTHON_DWA2002810_HPP # define PYTHON_DWA2002810_HPP # include # 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 # 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 # include # include # include # include # include # include # include # include # include # include #endif // PYTHON_DWA2002810_HPP random.hpp000444000765000024 722112161110642 20254 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/* boost random.hpp header file * * Copyright Jens Maurer 2000-2001 * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See http://www.boost.org/libs/random for documentation. * * $Id: random.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ * * Revision history * 2000-02-18 portability fixes (thanks to Beman Dawes) * 2000-02-21 shuffle_output, inversive_congruential_schrage, * generator_iterator, uniform_smallint * 2000-02-23 generic modulus arithmetic helper, removed *_schrage classes, * implemented Streamable and EqualityComparable concepts for * generators, added Bernoulli distribution and Box-Muller * transform * 2000-03-01 cauchy, lognormal, triangle distributions; fixed * uniform_smallint; renamed gaussian to normal distribution * 2000-03-05 implemented iterator syntax for distribution functions * 2000-04-21 removed some optimizations for better BCC/MSVC compatibility * 2000-05-10 adapted to BCC and MSVC * 2000-06-13 incorporated review results * 2000-07-06 moved basic templates from namespace detail to random * 2000-09-23 warning removals and int64 fixes (Ed Brey) * 2000-09-24 added lagged_fibonacci generator (Matthias Troyer) * 2001-02-18 moved to individual header files */ #ifndef BOOST_RANDOM_HPP #define BOOST_RANDOM_HPP // generators #include #include #include #include #include #include #include #include #include #include #include #include #include #include // misc #include #include #include #include // distributions #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 #include #endif // BOOST_RANDOM_HPP range.hpp000444000765000024 155312161110663 20075 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// Boost.Range library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/range/ // #ifndef BOOST_RANGE_HPP_27_07_04 #define BOOST_RANGE_HPP_27_07_04 #if defined(_MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #if _MSC_VER == 1300 // experiment #include #include #include #else #include #include #include #include #endif // _MSC_VER == 1300 // experiment #endif rational.hpp000444000765000024 4736412161110676 20650 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// Boost rational.hpp header file ------------------------------------------// // (C) Copyright Paul Moore 1999. Permission to copy, use, modify, sell and // distribute this software is granted provided this copyright notice appears // in all copies. This software is provided "as is" without express or // implied warranty, and with no claim as to its suitability for any purpose. // boostinspect:nolicense (don't complain about the lack of a Boost license) // (Paul Moore hasn't been in contact for years, so there's no way to change the // license.) // See http://www.boost.org/libs/rational for documentation. // Credits: // Thanks to the boost mailing list in general for useful comments. // Particular contributions included: // Andrew D Jewell, for reminding me to take care to avoid overflow // Ed Brey, for many comments, including picking up on some dreadful typos // Stephen Silver contributed the test suite and comments on user-defined // IntType // Nickolay Mladenov, for the implementation of operator+= // Revision History // 05 Nov 06 Change rational_cast to not depend on division between different // types (Daryle Walker) // 04 Nov 06 Off-load GCD and LCM to Boost.Math; add some invariant checks; // add std::numeric_limits<> requirement to help GCD (Daryle Walker) // 31 Oct 06 Recoded both operator< to use round-to-negative-infinity // divisions; the rational-value version now uses continued fraction // expansion to avoid overflows, for bug #798357 (Daryle Walker) // 20 Oct 06 Fix operator bool_type for CW 8.3 (Joaquín M López Muñoz) // 18 Oct 06 Use EXPLICIT_TEMPLATE_TYPE helper macros from Boost.Config // (Joaquín M López Muñoz) // 27 Dec 05 Add Boolean conversion operator (Daryle Walker) // 28 Sep 02 Use _left versions of operators from operators.hpp // 05 Jul 01 Recode gcd(), avoiding std::swap (Helmut Zeisel) // 03 Mar 01 Workarounds for Intel C++ 5.0 (David Abrahams) // 05 Feb 01 Update operator>> to tighten up input syntax // 05 Feb 01 Final tidy up of gcd code prior to the new release // 27 Jan 01 Recode abs() without relying on abs(IntType) // 21 Jan 01 Include Nickolay Mladenov's operator+= algorithm, // tidy up a number of areas, use newer features of operators.hpp // (reduces space overhead to zero), add operator!, // introduce explicit mixed-mode arithmetic operations // 12 Jan 01 Include fixes to handle a user-defined IntType better // 19 Nov 00 Throw on divide by zero in operator /= (John (EBo) David) // 23 Jun 00 Incorporate changes from Mark Rodgers for Borland C++ // 22 Jun 00 Change _MSC_VER to BOOST_MSVC so other compilers are not // affected (Beman Dawes) // 6 Mar 00 Fix operator-= normalization, #include (Jens Maurer) // 14 Dec 99 Modifications based on comments from the boost list // 09 Dec 99 Initial Version (Paul Moore) #ifndef BOOST_RATIONAL_HPP #define BOOST_RATIONAL_HPP #include // for std::istream and std::ostream #include // for std::noskipws #include // for std::domain_error #include // for std::string implicit constructor #include // for boost::addable etc #include // for std::abs #include // for boost::call_traits #include // for BOOST_NO_STDC_NAMESPACE, BOOST_MSVC #include // for BOOST_WORKAROUND #include // for BOOST_ASSERT #include // for boost::math::gcd, lcm #include // for std::numeric_limits #include // for BOOST_STATIC_ASSERT // Control whether depreciated GCD and LCM functions are included (default: yes) #ifndef BOOST_CONTROL_RATIONAL_HAS_GCD #define BOOST_CONTROL_RATIONAL_HAS_GCD 1 #endif namespace boost { #if BOOST_CONTROL_RATIONAL_HAS_GCD template IntType gcd(IntType n, IntType m) { // Defer to the version in Boost.Math return math::gcd( n, m ); } template IntType lcm(IntType n, IntType m) { // Defer to the version in Boost.Math return math::lcm( n, m ); } #endif // BOOST_CONTROL_RATIONAL_HAS_GCD class bad_rational : public std::domain_error { public: explicit bad_rational() : std::domain_error("bad rational: zero denominator") {} }; template class rational; template rational abs(const rational& r); template class rational : less_than_comparable < rational, equality_comparable < rational, less_than_comparable2 < rational, IntType, equality_comparable2 < rational, IntType, addable < rational, subtractable < rational, multipliable < rational, dividable < rational, addable2 < rational, IntType, subtractable2 < rational, IntType, subtractable2_left < rational, IntType, multipliable2 < rational, IntType, dividable2 < rational, IntType, dividable2_left < rational, IntType, incrementable < rational, decrementable < rational > > > > > > > > > > > > > > > > { // Class-wide pre-conditions BOOST_STATIC_ASSERT( ::std::numeric_limits::is_specialized ); // Helper types typedef typename boost::call_traits::param_type param_type; struct helper { IntType parts[2]; }; typedef IntType (helper::* bool_type)[2]; public: typedef IntType int_type; rational() : num(0), den(1) {} rational(param_type n) : num(n), den(1) {} rational(param_type n, param_type d) : num(n), den(d) { normalize(); } // Default copy constructor and assignment are fine // Add assignment from IntType rational& operator=(param_type n) { return assign(n, 1); } // Assign in place rational& assign(param_type n, param_type d); // Access to representation IntType numerator() const { return num; } IntType denominator() const { return den; } // Arithmetic assignment operators rational& operator+= (const rational& r); rational& operator-= (const rational& r); rational& operator*= (const rational& r); rational& operator/= (const rational& r); rational& operator+= (param_type i); rational& operator-= (param_type i); rational& operator*= (param_type i); rational& operator/= (param_type i); // Increment and decrement const rational& operator++(); const rational& operator--(); // Operator not bool operator!() const { return !num; } // Boolean conversion #if BOOST_WORKAROUND(__MWERKS__,<=0x3003) // The "ISO C++ Template Parser" option in CW 8.3 chokes on the // following, hence we selectively disable that option for the // offending memfun. #pragma parse_mfunc_templ off #endif operator bool_type() const { return operator !() ? 0 : &helper::parts; } #if BOOST_WORKAROUND(__MWERKS__,<=0x3003) #pragma parse_mfunc_templ reset #endif // Comparison operators bool operator< (const rational& r) const; bool operator== (const rational& r) const; bool operator< (param_type i) const; bool operator> (param_type i) const; bool operator== (param_type i) const; private: // Implementation - numerator and denominator (normalized). // Other possibilities - separate whole-part, or sign, fields? IntType num; IntType den; // Representation note: Fractions are kept in normalized form at all // times. normalized form is defined as gcd(num,den) == 1 and den > 0. // In particular, note that the implementation of abs() below relies // on den always being positive. bool test_invariant() const; void normalize(); }; // Assign in place template inline rational& rational::assign(param_type n, param_type d) { num = n; den = d; normalize(); return *this; } // Unary plus and minus template inline rational operator+ (const rational& r) { return r; } template inline rational operator- (const rational& r) { return rational(-r.numerator(), r.denominator()); } // Arithmetic assignment operators template rational& rational::operator+= (const rational& r) { // This calculation avoids overflow, and minimises the number of expensive // calculations. Thanks to Nickolay Mladenov for this algorithm. // // Proof: // We have to compute a/b + c/d, where gcd(a,b)=1 and gcd(b,c)=1. // Let g = gcd(b,d), and b = b1*g, d=d1*g. Then gcd(b1,d1)=1 // // The result is (a*d1 + c*b1) / (b1*d1*g). // Now we have to normalize this ratio. // Let's assume h | gcd((a*d1 + c*b1), (b1*d1*g)), and h > 1 // If h | b1 then gcd(h,d1)=1 and hence h|(a*d1+c*b1) => h|a. // But since gcd(a,b1)=1 we have h=1. // Similarly h|d1 leads to h=1. // So we have that h | gcd((a*d1 + c*b1) , (b1*d1*g)) => h|g // Finally we have gcd((a*d1 + c*b1), (b1*d1*g)) = gcd((a*d1 + c*b1), g) // Which proves that instead of normalizing the result, it is better to // divide num and den by gcd((a*d1 + c*b1), g) // Protect against self-modification IntType r_num = r.num; IntType r_den = r.den; IntType g = math::gcd(den, r_den); den /= g; // = b1 from the calculations above num = num * (r_den / g) + r_num * den; g = math::gcd(num, g); num /= g; den *= r_den/g; return *this; } template rational& rational::operator-= (const rational& r) { // Protect against self-modification IntType r_num = r.num; IntType r_den = r.den; // This calculation avoids overflow, and minimises the number of expensive // calculations. It corresponds exactly to the += case above IntType g = math::gcd(den, r_den); den /= g; num = num * (r_den / g) - r_num * den; g = math::gcd(num, g); num /= g; den *= r_den/g; return *this; } template rational& rational::operator*= (const rational& r) { // Protect against self-modification IntType r_num = r.num; IntType r_den = r.den; // Avoid overflow and preserve normalization IntType gcd1 = math::gcd(num, r_den); IntType gcd2 = math::gcd(r_num, den); num = (num/gcd1) * (r_num/gcd2); den = (den/gcd2) * (r_den/gcd1); return *this; } template rational& rational::operator/= (const rational& r) { // Protect against self-modification IntType r_num = r.num; IntType r_den = r.den; // Avoid repeated construction IntType zero(0); // Trap division by zero if (r_num == zero) throw bad_rational(); if (num == zero) return *this; // Avoid overflow and preserve normalization IntType gcd1 = math::gcd(num, r_num); IntType gcd2 = math::gcd(r_den, den); num = (num/gcd1) * (r_den/gcd2); den = (den/gcd2) * (r_num/gcd1); if (den < zero) { num = -num; den = -den; } return *this; } // Mixed-mode operators template inline rational& rational::operator+= (param_type i) { return operator+= (rational(i)); } template inline rational& rational::operator-= (param_type i) { return operator-= (rational(i)); } template inline rational& rational::operator*= (param_type i) { return operator*= (rational(i)); } template inline rational& rational::operator/= (param_type i) { return operator/= (rational(i)); } // Increment and decrement template inline const rational& rational::operator++() { // This can never denormalise the fraction num += den; return *this; } template inline const rational& rational::operator--() { // This can never denormalise the fraction num -= den; return *this; } // Comparison operators template bool rational::operator< (const rational& r) const { // Avoid repeated construction int_type const zero( 0 ); // This should really be a class-wide invariant. The reason for these // checks is that for 2's complement systems, INT_MIN has no corresponding // positive, so negating it during normalization keeps it INT_MIN, which // is bad for later calculations that assume a positive denominator. BOOST_ASSERT( this->den > zero ); BOOST_ASSERT( r.den > zero ); // Determine relative order by expanding each value to its simple continued // fraction representation using the Euclidian GCD algorithm. struct { int_type n, d, q, r; } ts = { this->num, this->den, this->num / this->den, this->num % this->den }, rs = { r.num, r.den, r.num / r.den, r.num % r.den }; unsigned reverse = 0u; // Normalize negative moduli by repeatedly adding the (positive) denominator // and decrementing the quotient. Later cycles should have all positive // values, so this only has to be done for the first cycle. (The rules of // C++ require a nonnegative quotient & remainder for a nonnegative dividend // & positive divisor.) while ( ts.r < zero ) { ts.r += ts.d; --ts.q; } while ( rs.r < zero ) { rs.r += rs.d; --rs.q; } // Loop through and compare each variable's continued-fraction components while ( true ) { // The quotients of the current cycle are the continued-fraction // components. Comparing two c.f. is comparing their sequences, // stopping at the first difference. if ( ts.q != rs.q ) { // Since reciprocation changes the relative order of two variables, // and c.f. use reciprocals, the less/greater-than test reverses // after each index. (Start w/ non-reversed @ whole-number place.) return reverse ? ts.q > rs.q : ts.q < rs.q; } // Prepare the next cycle reverse ^= 1u; if ( (ts.r == zero) || (rs.r == zero) ) { // At least one variable's c.f. expansion has ended break; } ts.n = ts.d; ts.d = ts.r; ts.q = ts.n / ts.d; ts.r = ts.n % ts.d; rs.n = rs.d; rs.d = rs.r; rs.q = rs.n / rs.d; rs.r = rs.n % rs.d; } // Compare infinity-valued components for otherwise equal sequences if ( ts.r == rs.r ) { // Both remainders are zero, so the next (and subsequent) c.f. // components for both sequences are infinity. Therefore, the sequences // and their corresponding values are equal. return false; } else { #ifdef BOOST_MSVC #pragma warning(push) #pragma warning(disable:4800) #endif // Exactly one of the remainders is zero, so all following c.f. // components of that variable are infinity, while the other variable // has a finite next c.f. component. So that other variable has the // lesser value (modulo the reversal flag!). return ( ts.r != zero ) != static_cast( reverse ); #ifdef BOOST_MSVC #pragma warning(pop) #endif } } template bool rational::operator< (param_type i) const { // Avoid repeated construction int_type const zero( 0 ); // Break value into mixed-fraction form, w/ always-nonnegative remainder BOOST_ASSERT( this->den > zero ); int_type q = this->num / this->den, r = this->num % this->den; while ( r < zero ) { r += this->den; --q; } // Compare with just the quotient, since the remainder always bumps the // value up. [Since q = floor(n/d), and if n/d < i then q < i, if n/d == i // then q == i, if n/d == i + r/d then q == i, and if n/d >= i + 1 then // q >= i + 1 > i; therefore n/d < i iff q < i.] return q < i; } template bool rational::operator> (param_type i) const { // Trap equality first if (num == i && den == IntType(1)) return false; // Otherwise, we can use operator< return !operator<(i); } template inline bool rational::operator== (const rational& r) const { return ((num == r.num) && (den == r.den)); } template inline bool rational::operator== (param_type i) const { return ((den == IntType(1)) && (num == i)); } // Invariant check template inline bool rational::test_invariant() const { return ( this->den > int_type(0) ) && ( math::gcd(this->num, this->den) == int_type(1) ); } // Normalisation template void rational::normalize() { // Avoid repeated construction IntType zero(0); if (den == zero) throw bad_rational(); // Handle the case of zero separately, to avoid division by zero if (num == zero) { den = IntType(1); return; } IntType g = math::gcd(num, den); num /= g; den /= g; // Ensure that the denominator is positive if (den < zero) { num = -num; den = -den; } BOOST_ASSERT( this->test_invariant() ); } namespace detail { // A utility class to reset the format flags for an istream at end // of scope, even in case of exceptions struct resetter { resetter(std::istream& is) : is_(is), f_(is.flags()) {} ~resetter() { is_.flags(f_); } std::istream& is_; std::istream::fmtflags f_; // old GNU c++ lib has no ios_base }; } // Input and output template std::istream& operator>> (std::istream& is, rational& r) { IntType n = IntType(0), d = IntType(1); char c = 0; detail::resetter sentry(is); is >> n; c = is.get(); if (c != '/') is.clear(std::istream::badbit); // old GNU c++ lib has no ios_base #if !defined(__GNUC__) || (defined(__GNUC__) && (__GNUC__ >= 3)) || defined __SGI_STL_PORT is >> std::noskipws; #else is.unsetf(ios::skipws); // compiles, but seems to have no effect. #endif is >> d; if (is) r.assign(n, d); return is; } // Add manipulators for output format? template std::ostream& operator<< (std::ostream& os, const rational& r) { os << r.numerator() << '/' << r.denominator(); return os; } // Type conversion template inline T rational_cast( const rational& src BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) { return static_cast(src.numerator())/static_cast(src.denominator()); } // Do not use any abs() defined on IntType - it isn't worth it, given the // difficulties involved (Koenig lookup required, there may not *be* an abs() // defined, etc etc). template inline rational abs(const rational& r) { if (r.numerator() >= IntType(0)) return r; return rational(-r.numerator(), r.denominator()); } } // namespace boost #endif // BOOST_RATIONAL_HPP ref.hpp000444000765000024 1002312161110701 17556 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 scoped_array.hpp000444000765000024 100612161110700 21435 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 scoped_ptr.hpp000444000765000024 77312161110650 21122 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 shared_array.hpp000444000765000024 107312161110620 21433 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 shared_ptr.hpp000444000765000024 105612161110664 21133 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 smart_ptr.hpp000444000765000024 163312161110610 21003 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 static_assert.hpp000444000765000024 1243012161110656 21667 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// (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_CXX11_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_CXX11_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_CXX11_STATIC_ASSERT) #endif // BOOST_STATIC_ASSERT_HPP swap.hpp000444000765000024 45312161110625 17727 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 throw_exception.hpp000444000765000024 566612161110615 22230 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#ifndef UUID_AA15E74A856F11E08B8D93F24824019B #define UUID_AA15E74A856F11E08B8D93F24824019B #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 // 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( enable_error_info(x), throw_function(current_function)), throw_file(file)), throw_line(line))); } } #endif } // namespace boost #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) #pragma warning(pop) #endif #endif timer.hpp000444000765000024 525712161110617 20125 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 token_functions.hpp000444000765000024 4765112161110620 22233 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 token_iterator.hpp000444000765000024 743612161110626 22037 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 tokenizer.hpp000444000765000024 550112161110611 21001 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 type.hpp000444000765000024 76312161110625 17742 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// (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 type_traits.hpp000444000765000024 1041012161110677 21365 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// (C) Copyright John Maddock 2000. // Use, modification and distribution are subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt). // // See http://www.boost.org/libs/type_traits for most recent version including documentation. // See boost/type_traits/*.hpp for full copyright notices. #ifndef BOOST_TYPE_TRAITS_HPP #define BOOST_TYPE_TRAITS_HPP #include "boost/type_traits/add_const.hpp" #include "boost/type_traits/add_cv.hpp" #include "boost/type_traits/add_lvalue_reference.hpp" #include "boost/type_traits/add_pointer.hpp" #include "boost/type_traits/add_reference.hpp" #include "boost/type_traits/add_rvalue_reference.hpp" #include "boost/type_traits/add_volatile.hpp" #include "boost/type_traits/aligned_storage.hpp" #include "boost/type_traits/alignment_of.hpp" #include "boost/type_traits/common_type.hpp" #include "boost/type_traits/conditional.hpp" #include "boost/type_traits/decay.hpp" #include "boost/type_traits/extent.hpp" #include "boost/type_traits/floating_point_promotion.hpp" #include "boost/type_traits/function_traits.hpp" #if !defined(__BORLANDC__) && !defined(__CUDACC__) #include "boost/type_traits/has_new_operator.hpp" #endif #include "boost/type_traits/has_nothrow_assign.hpp" #include "boost/type_traits/has_nothrow_constructor.hpp" #include "boost/type_traits/has_nothrow_copy.hpp" #include "boost/type_traits/has_nothrow_destructor.hpp" #include #include "boost/type_traits/has_trivial_assign.hpp" #include "boost/type_traits/has_trivial_constructor.hpp" #include "boost/type_traits/has_trivial_copy.hpp" #include "boost/type_traits/has_trivial_destructor.hpp" #include "boost/type_traits/has_virtual_destructor.hpp" #include "boost/type_traits/is_abstract.hpp" #include "boost/type_traits/is_arithmetic.hpp" #include "boost/type_traits/is_array.hpp" #include "boost/type_traits/is_base_and_derived.hpp" #include "boost/type_traits/is_base_of.hpp" #include "boost/type_traits/is_class.hpp" #include #include "boost/type_traits/is_compound.hpp" #include "boost/type_traits/is_const.hpp" #include "boost/type_traits/is_convertible.hpp" #include "boost/type_traits/is_empty.hpp" #include "boost/type_traits/is_enum.hpp" #include "boost/type_traits/is_float.hpp" #include "boost/type_traits/is_floating_point.hpp" #include "boost/type_traits/is_function.hpp" #include "boost/type_traits/is_fundamental.hpp" #include "boost/type_traits/is_integral.hpp" #include "boost/type_traits/is_lvalue_reference.hpp" #include "boost/type_traits/is_member_function_pointer.hpp" #include "boost/type_traits/is_member_object_pointer.hpp" #include "boost/type_traits/is_member_pointer.hpp" #include "boost/type_traits/is_object.hpp" #include "boost/type_traits/is_pod.hpp" #include "boost/type_traits/is_polymorphic.hpp" #include "boost/type_traits/is_pointer.hpp" #include "boost/type_traits/is_reference.hpp" #include "boost/type_traits/is_rvalue_reference.hpp" #include "boost/type_traits/is_signed.hpp" #include "boost/type_traits/is_same.hpp" #include "boost/type_traits/is_scalar.hpp" #include "boost/type_traits/is_stateless.hpp" #include "boost/type_traits/is_union.hpp" #include "boost/type_traits/is_unsigned.hpp" #include "boost/type_traits/is_void.hpp" #include "boost/type_traits/is_virtual_base_of.hpp" #include "boost/type_traits/is_volatile.hpp" #include #include #include "boost/type_traits/rank.hpp" #include "boost/type_traits/remove_bounds.hpp" #include "boost/type_traits/remove_extent.hpp" #include "boost/type_traits/remove_all_extents.hpp" #include "boost/type_traits/remove_const.hpp" #include "boost/type_traits/remove_cv.hpp" #include "boost/type_traits/remove_pointer.hpp" #include "boost/type_traits/remove_reference.hpp" #include "boost/type_traits/remove_volatile.hpp" #include "boost/type_traits/type_with_alignment.hpp" #if !(defined(__sgi) && defined(__EDG_VERSION__) && (__EDG_VERSION__ == 238)) #include "boost/type_traits/integral_promotion.hpp" #include "boost/type_traits/promote.hpp" #endif #include "boost/type_traits/ice.hpp" #endif // BOOST_TYPE_TRAITS_HPP unordered_map.hpp000444000765000024 107012161110652 21615 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. // Copyright (C) 2005-2008 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) // See http://www.boost.org/libs/unordered for documentation #ifndef BOOST_UNORDERED_MAP_HPP_INCLUDED #define BOOST_UNORDERED_MAP_HPP_INCLUDED #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #endif // BOOST_UNORDERED_MAP_HPP_INCLUDED unordered_set.hpp000444000765000024 107012161110636 21635 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. // Copyright (C) 2005-2008 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) // See http://www.boost.org/libs/unordered for documentation #ifndef BOOST_UNORDERED_SET_HPP_INCLUDED #define BOOST_UNORDERED_SET_HPP_INCLUDED #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #endif // BOOST_UNORDERED_SET_HPP_INCLUDED utility.hpp000444000765000024 144312161110702 20474 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 #include #endif // BOOST_UTILITY_HPP version.hpp000444000765000024 220112161110635 20454 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 105300 // // 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_53" #endif visit_each.hpp000444000765000024 135412161110616 21114 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost// 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 weak_ptr.hpp000444000765000024 75412161110601 20567 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost#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 algorithm000755000765000024 012161110644 20114 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/booststring.hpp000444000765000024 210412161110644 22265 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm// Boost string_algo library string_algo.hpp header file ---------------------------// // Copyright Pavol Droba 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/ for updates, documentation, and revision history. #ifndef BOOST_STRING_ALGO_HPP #define BOOST_STRING_ALGO_HPP /*! \file Cumulative include for string_algo library */ #include #include #include #include #include #include #include #include #include #include #include #endif // BOOST_STRING_ALGO_HPP string000755000765000024 012161110676 21427 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithmcase_conv.hpp000444000765000024 1431112161110674 24253 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library case_conv.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_CASE_CONV_HPP #define BOOST_STRING_CASE_CONV_HPP #include #include #include #include #include #include #include #include #include /*! \file Defines sequence case-conversion algorithms. Algorithms convert each element in the input sequence to the desired case using provided locales. */ namespace boost { namespace algorithm { // to_lower -----------------------------------------------// //! Convert to lower case /*! Each element of the input sequence is converted to lower case. The result is a copy of the input converted to lower case. It is returned as a sequence or copied to the output iterator. \param Output An output iterator to which the result will be copied \param Input An input range \param Loc A locale used for conversion \return An output iterator pointing just after the last inserted character or a copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template inline OutputIteratorT to_lower_copy( OutputIteratorT Output, const RangeT& Input, const std::locale& Loc=std::locale()) { return ::boost::algorithm::detail::transform_range_copy( Output, ::boost::as_literal(Input), ::boost::algorithm::detail::to_lowerF< typename range_value::type >(Loc)); } //! Convert to lower case /*! \overload */ template inline SequenceT to_lower_copy( const SequenceT& Input, const std::locale& Loc=std::locale()) { return ::boost::algorithm::detail::transform_range_copy( Input, ::boost::algorithm::detail::to_lowerF< typename range_value::type >(Loc)); } //! Convert to lower case /*! Each element of the input sequence is converted to lower case. The input sequence is modified in-place. \param Input A range \param Loc a locale used for conversion */ template inline void to_lower( WritableRangeT& Input, const std::locale& Loc=std::locale()) { ::boost::algorithm::detail::transform_range( ::boost::as_literal(Input), ::boost::algorithm::detail::to_lowerF< typename range_value::type >(Loc)); } // to_upper -----------------------------------------------// //! Convert to upper case /*! Each element of the input sequence is converted to upper case. The result is a copy of the input converted to upper case. It is returned as a sequence or copied to the output iterator \param Output An output iterator to which the result will be copied \param Input An input range \param Loc A locale used for conversion \return An output iterator pointing just after the last inserted character or a copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template inline OutputIteratorT to_upper_copy( OutputIteratorT Output, const RangeT& Input, const std::locale& Loc=std::locale()) { return ::boost::algorithm::detail::transform_range_copy( Output, ::boost::as_literal(Input), ::boost::algorithm::detail::to_upperF< typename range_value::type >(Loc)); } //! Convert to upper case /*! \overload */ template inline SequenceT to_upper_copy( const SequenceT& Input, const std::locale& Loc=std::locale()) { return ::boost::algorithm::detail::transform_range_copy( Input, ::boost::algorithm::detail::to_upperF< typename range_value::type >(Loc)); } //! Convert to upper case /*! Each element of the input sequence is converted to upper case. The input sequence is modified in-place. \param Input An input range \param Loc a locale used for conversion */ template inline void to_upper( WritableRangeT& Input, const std::locale& Loc=std::locale()) { ::boost::algorithm::detail::transform_range( ::boost::as_literal(Input), ::boost::algorithm::detail::to_upperF< typename range_value::type >(Loc)); } } // namespace algorithm // pull names to the boost namespace using algorithm::to_lower; using algorithm::to_lower_copy; using algorithm::to_upper; using algorithm::to_upper_copy; } // namespace boost #endif // BOOST_STRING_CASE_CONV_HPP classification.hpp000444000765000024 2726212161110645 25315 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library classification.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_CLASSIFICATION_HPP #define BOOST_STRING_CLASSIFICATION_HPP #include #include #include #include #include #include /*! \file Classification predicates are included in the library to give some more convenience when using algorithms like \c trim() and \c all(). They wrap functionality of STL classification functions ( e.g. \c std::isspace() ) into generic functors. */ namespace boost { namespace algorithm { // classification functor generator -------------------------------------// //! is_classified predicate /*! Construct the \c is_classified predicate. This predicate holds if the input is of specified \c std::ctype category. \param Type A \c std::ctype category \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_classified(std::ctype_base::mask Type, const std::locale& Loc=std::locale()) { return detail::is_classifiedF(Type, Loc); } //! is_space predicate /*! Construct the \c is_classified predicate for the \c ctype_base::space category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_space(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::space, Loc); } //! is_alnum predicate /*! Construct the \c is_classified predicate for the \c ctype_base::alnum category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_alnum(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::alnum, Loc); } //! is_alpha predicate /*! Construct the \c is_classified predicate for the \c ctype_base::alpha category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_alpha(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::alpha, Loc); } //! is_cntrl predicate /*! Construct the \c is_classified predicate for the \c ctype_base::cntrl category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_cntrl(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::cntrl, Loc); } //! is_digit predicate /*! Construct the \c is_classified predicate for the \c ctype_base::digit category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_digit(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::digit, Loc); } //! is_graph predicate /*! Construct the \c is_classified predicate for the \c ctype_base::graph category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_graph(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::graph, Loc); } //! is_lower predicate /*! Construct the \c is_classified predicate for the \c ctype_base::lower category. \param Loc A locale used for classification \return An instance of \c is_classified predicate */ inline detail::is_classifiedF is_lower(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::lower, Loc); } //! is_print predicate /*! Construct the \c is_classified predicate for the \c ctype_base::print category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_print(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::print, Loc); } //! is_punct predicate /*! Construct the \c is_classified predicate for the \c ctype_base::punct category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_punct(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::punct, Loc); } //! is_upper predicate /*! Construct the \c is_classified predicate for the \c ctype_base::upper category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_upper(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::upper, Loc); } //! is_xdigit predicate /*! Construct the \c is_classified predicate for the \c ctype_base::xdigit category. \param Loc A locale used for classification \return An instance of the \c is_classified predicate */ inline detail::is_classifiedF is_xdigit(const std::locale& Loc=std::locale()) { return detail::is_classifiedF(std::ctype_base::xdigit, Loc); } //! is_any_of predicate /*! Construct the \c is_any_of predicate. The predicate holds if the input is included in the specified set of characters. \param Set A set of characters to be recognized \return An instance of the \c is_any_of predicate */ template inline detail::is_any_ofF< BOOST_STRING_TYPENAME range_value::type> is_any_of( const RangeT& Set ) { iterator_range::type> lit_set(boost::as_literal(Set)); return detail::is_any_ofF::type>(lit_set); } //! is_from_range predicate /*! Construct the \c is_from_range predicate. The predicate holds if the input is included in the specified range. (i.e. From <= Ch <= To ) \param From The start of the range \param To The end of the range \return An instance of the \c is_from_range predicate */ template inline detail::is_from_rangeF is_from_range(CharT From, CharT To) { return detail::is_from_rangeF(From,To); } // predicate combinators ---------------------------------------------------// //! predicate 'and' composition predicate /*! Construct the \c class_and predicate. This predicate can be used to logically combine two classification predicates. \c class_and holds, if both predicates return true. \param Pred1 The first predicate \param Pred2 The second predicate \return An instance of the \c class_and predicate */ template inline detail::pred_andF operator&&( const predicate_facade& Pred1, const predicate_facade& Pred2 ) { // Doing the static_cast with the pointer instead of the reference // is a workaround for some compilers which have problems with // static_cast's of template references, i.e. CW8. /grafik/ return detail::pred_andF( *static_cast(&Pred1), *static_cast(&Pred2) ); } //! predicate 'or' composition predicate /*! Construct the \c class_or predicate. This predicate can be used to logically combine two classification predicates. \c class_or holds, if one of the predicates return true. \param Pred1 The first predicate \param Pred2 The second predicate \return An instance of the \c class_or predicate */ template inline detail::pred_orF operator||( const predicate_facade& Pred1, const predicate_facade& Pred2 ) { // Doing the static_cast with the pointer instead of the reference // is a workaround for some compilers which have problems with // static_cast's of template references, i.e. CW8. /grafik/ return detail::pred_orF( *static_cast(&Pred1), *static_cast(&Pred2)); } //! predicate negation operator /*! Construct the \c class_not predicate. This predicate represents a negation. \c class_or holds if of the predicates return false. \param Pred The predicate to be negated \return An instance of the \c class_not predicate */ template inline detail::pred_notF operator!( const predicate_facade& Pred ) { // Doing the static_cast with the pointer instead of the reference // is a workaround for some compilers which have problems with // static_cast's of template references, i.e. CW8. /grafik/ return detail::pred_notF(*static_cast(&Pred)); } } // namespace algorithm // pull names to the boost namespace using algorithm::is_classified; using algorithm::is_space; using algorithm::is_alnum; using algorithm::is_alpha; using algorithm::is_cntrl; using algorithm::is_digit; using algorithm::is_graph; using algorithm::is_lower; using algorithm::is_upper; using algorithm::is_print; using algorithm::is_punct; using algorithm::is_xdigit; using algorithm::is_any_of; using algorithm::is_from_range; } // namespace boost #endif // BOOST_STRING_PREDICATE_HPP compare.hpp000444000765000024 1465412161110676 23755 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library compare.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_COMPARE_HPP #define BOOST_STRING_COMPARE_HPP #include #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 concept.hpp000444000765000024 456612161110615 23734 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 config.hpp000444000765000024 146212161110676 23545 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 constants.hpp000444000765000024 201312161110646 24302 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 erase.hpp000444000765000024 7761412161110624 23424 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library erase.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_ERASE_HPP #define BOOST_STRING_ERASE_HPP #include #include #include #include #include #include #include #include #include /*! \file Defines various erase algorithms. Each algorithm removes part(s) of the input according to a searching criteria. */ namespace boost { namespace algorithm { // erase_range -------------------------------------------------------// //! Erase range algorithm /*! Remove the given range from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. \param Output An output iterator to which the result will be copied \param Input An input sequence \param SearchRange A range in the input to be removed \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template inline OutputIteratorT erase_range_copy( OutputIteratorT Output, const RangeT& Input, const iterator_range< BOOST_STRING_TYPENAME range_const_iterator::type>& SearchRange ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::range_finder(SearchRange), ::boost::algorithm::empty_formatter(Input) ); } //! Erase range algorithm /*! \overload */ template inline SequenceT erase_range_copy( const SequenceT& Input, const iterator_range< BOOST_STRING_TYPENAME range_const_iterator::type>& SearchRange ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::range_finder(SearchRange), ::boost::algorithm::empty_formatter(Input) ); } //! Erase range algorithm /*! Remove the given range from the input. The input sequence is modified in-place. \param Input An input sequence \param SearchRange A range in the input to be removed */ template inline void erase_range( SequenceT& Input, const iterator_range< BOOST_STRING_TYPENAME range_iterator::type>& SearchRange ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::range_finder(SearchRange), ::boost::algorithm::empty_formatter(Input) ); } // erase_first --------------------------------------------------------// //! Erase first algorithm /*! Remove the first occurrence of the substring from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. \param Output An output iterator to which the result will be copied \param Input An input string \param Search A substring to be searched for \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename Range1T, typename Range2T> inline OutputIteratorT erase_first_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::first_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } //! Erase first algorithm /*! \overload */ template inline SequenceT erase_first_copy( const SequenceT& Input, const RangeT& Search ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::first_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } //! Erase first algorithm /*! Remove the first occurrence of the substring from the input. The input sequence is modified in-place. \param Input An input string \param Search A substring to be searched for. */ template inline void erase_first( SequenceT& Input, const RangeT& Search ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::first_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } // erase_first ( case insensitive ) ------------------------------------// //! Erase first algorithm ( case insensitive ) /*! Remove the first occurrence of the substring from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. \param Output An output iterator to which the result will be copied \param Input An input string \param Search A substring to be searched for \param Loc A locale used for case insensitive comparison \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename Range1T, typename Range2T> inline OutputIteratorT ierase_first_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::first_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } //! Erase first algorithm ( case insensitive ) /*! \overload */ template inline SequenceT ierase_first_copy( const SequenceT& Input, const RangeT& Search, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::first_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } //! Erase first algorithm ( case insensitive ) /*! Remove the first occurrence of the substring from the input. The input sequence is modified in-place. Searching is case insensitive. \param Input An input string \param Search A substring to be searched for \param Loc A locale used for case insensitive comparison */ template inline void ierase_first( SequenceT& Input, const RangeT& Search, const std::locale& Loc=std::locale() ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::first_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } // erase_last --------------------------------------------------------// //! Erase last algorithm /*! Remove the last occurrence of the substring from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. \param Output An output iterator to which the result will be copied \param Input An input string \param Search A substring to be searched for. \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename Range1T, typename Range2T> inline OutputIteratorT erase_last_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::last_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } //! Erase last algorithm /*! \overload */ template inline SequenceT erase_last_copy( const SequenceT& Input, const RangeT& Search ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::last_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } //! Erase last algorithm /*! Remove the last occurrence of the substring from the input. The input sequence is modified in-place. \param Input An input string \param Search A substring to be searched for */ template inline void erase_last( SequenceT& Input, const RangeT& Search ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::last_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } // erase_last ( case insensitive ) ------------------------------------// //! Erase last algorithm ( case insensitive ) /*! Remove the last occurrence of the substring from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. \param Output An output iterator to which the result will be copied \param Input An input string \param Search A substring to be searched for \param Loc A locale used for case insensitive comparison \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename Range1T, typename Range2T> inline OutputIteratorT ierase_last_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::last_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } //! Erase last algorithm ( case insensitive ) /*! \overload */ template inline SequenceT ierase_last_copy( const SequenceT& Input, const RangeT& Search, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::last_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } //! Erase last algorithm ( case insensitive ) /*! Remove the last occurrence of the substring from the input. The input sequence is modified in-place. Searching is case insensitive. \param Input An input string \param Search A substring to be searched for \param Loc A locale used for case insensitive comparison */ template inline void ierase_last( SequenceT& Input, const RangeT& Search, const std::locale& Loc=std::locale() ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::last_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } // erase_nth --------------------------------------------------------------------// //! Erase nth algorithm /*! Remove the Nth occurrence of the substring in the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. \param Output An output iterator to which the result will be copied \param Input An input string \param Search A substring to be searched for \param Nth An index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename Range1T, typename Range2T> inline OutputIteratorT erase_nth_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search, int Nth ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::nth_finder(Search, Nth), ::boost::algorithm::empty_formatter(Input) ); } //! Erase nth algorithm /*! \overload */ template inline SequenceT erase_nth_copy( const SequenceT& Input, const RangeT& Search, int Nth ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::nth_finder(Search, Nth), ::boost::algorithm::empty_formatter(Input) ); } //! Erase nth algorithm /*! Remove the Nth occurrence of the substring in the input. The input sequence is modified in-place. \param Input An input string \param Search A substring to be searched for. \param Nth An index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. */ template inline void erase_nth( SequenceT& Input, const RangeT& Search, int Nth ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::nth_finder(Search, Nth), ::boost::algorithm::empty_formatter(Input) ); } // erase_nth ( case insensitive ) ---------------------------------------------// //! Erase nth algorithm ( case insensitive ) /*! Remove the Nth occurrence of the substring in the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. \param Output An output iterator to which the result will be copied \param Input An input string \param Search A substring to be searched for. \param Nth An index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. \param Loc A locale used for case insensitive comparison \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename Range1T, typename Range2T> inline OutputIteratorT ierase_nth_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search, int Nth, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } //! Erase nth algorithm /*! \overload */ template inline SequenceT ierase_nth_copy( const SequenceT& Input, const RangeT& Search, int Nth, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), empty_formatter(Input) ); } //! Erase nth algorithm /*! Remove the Nth occurrence of the substring in the input. The input sequence is modified in-place. Searching is case insensitive. \param Input An input string \param Search A substring to be searched for. \param Nth An index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. \param Loc A locale used for case insensitive comparison */ template inline void ierase_nth( SequenceT& Input, const RangeT& Search, int Nth, const std::locale& Loc=std::locale() ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } // erase_all --------------------------------------------------------// //! Erase all algorithm /*! Remove all the occurrences of the string from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. \param Output An output iterator to which the result will be copied \param Input An input sequence \param Search A substring to be searched for. \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename Range1T, typename Range2T> inline OutputIteratorT erase_all_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search ) { return ::boost::algorithm::find_format_all_copy( Output, Input, ::boost::algorithm::first_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } //! Erase all algorithm /*! \overload */ template inline SequenceT erase_all_copy( const SequenceT& Input, const RangeT& Search ) { return ::boost::algorithm::find_format_all_copy( Input, ::boost::algorithm::first_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } //! Erase all algorithm /*! Remove all the occurrences of the string from the input. The input sequence is modified in-place. \param Input An input string \param Search A substring to be searched for. */ template inline void erase_all( SequenceT& Input, const RangeT& Search ) { ::boost::algorithm::find_format_all( Input, ::boost::algorithm::first_finder(Search), ::boost::algorithm::empty_formatter(Input) ); } // erase_all ( case insensitive ) ------------------------------------// //! Erase all algorithm ( case insensitive ) /*! Remove all the occurrences of the string from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. \param Output An output iterator to which the result will be copied \param Input An input string \param Search A substring to be searched for \param Loc A locale used for case insensitive comparison \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename Range1T, typename Range2T> inline OutputIteratorT ierase_all_copy( OutputIteratorT Output, const Range1T& Input, const Range2T& Search, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::find_format_all_copy( Output, Input, ::boost::algorithm::first_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } //! Erase all algorithm ( case insensitive ) /*! \overload */ template inline SequenceT ierase_all_copy( const SequenceT& Input, const RangeT& Search, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::find_format_all_copy( Input, ::boost::algorithm::first_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } //! Erase all algorithm ( case insensitive ) /*! Remove all the occurrences of the string from the input. The input sequence is modified in-place. Searching is case insensitive. \param Input An input string \param Search A substring to be searched for. \param Loc A locale used for case insensitive comparison */ template inline void ierase_all( SequenceT& Input, const RangeT& Search, const std::locale& Loc=std::locale() ) { ::boost::algorithm::find_format_all( Input, ::boost::algorithm::first_finder(Search, is_iequal(Loc)), ::boost::algorithm::empty_formatter(Input) ); } // erase_head --------------------------------------------------------------------// //! Erase head algorithm /*! Remove the head from the input. The head is a prefix of a sequence of given size. If the sequence is shorter then required, the whole string is considered to be the head. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. \param Output An output iterator to which the result will be copied \param Input An input string \param N Length of the head. For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename RangeT> inline OutputIteratorT erase_head_copy( OutputIteratorT Output, const RangeT& Input, int N ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::head_finder(N), ::boost::algorithm::empty_formatter( Input ) ); } //! Erase head algorithm /*! \overload */ template inline SequenceT erase_head_copy( const SequenceT& Input, int N ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::head_finder(N), ::boost::algorithm::empty_formatter( Input ) ); } //! Erase head algorithm /*! Remove the head from the input. The head is a prefix of a sequence of given size. If the sequence is shorter then required, the whole string is considered to be the head. The input sequence is modified in-place. \param Input An input string \param N Length of the head For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. */ template inline void erase_head( SequenceT& Input, int N ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::head_finder(N), ::boost::algorithm::empty_formatter( Input ) ); } // erase_tail --------------------------------------------------------------------// //! Erase tail algorithm /*! Remove the tail from the input. The tail is a suffix of a sequence of given size. If the sequence is shorter then required, the whole string is considered to be the tail. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. \param Output An output iterator to which the result will be copied \param Input An input string \param N Length of the tail. For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. \return An output iterator pointing just after the last inserted character or a modified copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template< typename OutputIteratorT, typename RangeT> inline OutputIteratorT erase_tail_copy( OutputIteratorT Output, const RangeT& Input, int N ) { return ::boost::algorithm::find_format_copy( Output, Input, ::boost::algorithm::tail_finder(N), ::boost::algorithm::empty_formatter( Input ) ); } //! Erase tail algorithm /*! \overload */ template inline SequenceT erase_tail_copy( const SequenceT& Input, int N ) { return ::boost::algorithm::find_format_copy( Input, ::boost::algorithm::tail_finder(N), ::boost::algorithm::empty_formatter( Input ) ); } //! Erase tail algorithm /*! Remove the tail from the input. The tail is a suffix of a sequence of given size. If the sequence is shorter then required, the whole string is considered to be the tail. The input sequence is modified in-place. \param Input An input string \param N Length of the tail For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. */ template inline void erase_tail( SequenceT& Input, int N ) { ::boost::algorithm::find_format( Input, ::boost::algorithm::tail_finder(N), ::boost::algorithm::empty_formatter( Input ) ); } } // namespace algorithm // pull names into the boost namespace using algorithm::erase_range_copy; using algorithm::erase_range; using algorithm::erase_first_copy; using algorithm::erase_first; using algorithm::ierase_first_copy; using algorithm::ierase_first; using algorithm::erase_last_copy; using algorithm::erase_last; using algorithm::ierase_last_copy; using algorithm::ierase_last; using algorithm::erase_nth_copy; using algorithm::erase_nth; using algorithm::ierase_nth_copy; using algorithm::ierase_nth; using algorithm::erase_all_copy; using algorithm::erase_all; using algorithm::ierase_all_copy; using algorithm::ierase_all; using algorithm::erase_head_copy; using algorithm::erase_head; using algorithm::erase_tail_copy; using algorithm::erase_tail; } // namespace boost #endif // BOOST_ERASE_HPP find.hpp000444000765000024 3213012161110651 23225 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library find.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_HPP #define BOOST_STRING_FIND_HPP #include #include #include #include #include #include #include #include #include /*! \file Defines a set of find algorithms. The algorithms are searching for a substring of the input. The result is given as an \c iterator_range delimiting the substring. */ namespace boost { namespace algorithm { // Generic find -----------------------------------------------// //! Generic find algorithm /*! Search the input using the given finder. \param Input A string which will be searched. \param Finder Finder object used for searching. \return An \c iterator_range delimiting the match. Returned iterator is either \c RangeT::iterator or \c RangeT::const_iterator, depending on the constness of the input parameter. */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> find( RangeT& Input, const FinderT& Finder) { iterator_range::type> lit_input(::boost::as_literal(Input)); return Finder(::boost::begin(lit_input),::boost::end(lit_input)); } // find_first -----------------------------------------------// //! Find first algorithm /*! Search for the first occurrence of the substring in the input. \param Input A string which will be searched. \param Search A substring to be searched for. \return An \c iterator_range delimiting the match. Returned iterator is either \c RangeT::iterator or \c RangeT::const_iterator, depending on the constness of the input parameter. \note This function provides the strong exception-safety guarantee */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> find_first( Range1T& Input, const Range2T& Search) { return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search)); } //! Find first algorithm ( case insensitive ) /*! Search for the first occurrence of the substring in the input. Searching is case insensitive. \param Input A string which will be searched. \param Search A substring to be searched for. \param Loc A locale used for case insensitive comparison \return An \c iterator_range delimiting the match. Returned iterator is either \c Range1T::iterator or \c Range1T::const_iterator, depending on the constness of the input parameter. \note This function provides the strong exception-safety guarantee */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> ifind_first( Range1T& Input, const Range2T& Search, const std::locale& Loc=std::locale()) { return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search,is_iequal(Loc))); } // find_last -----------------------------------------------// //! Find last algorithm /*! Search for the last occurrence of the substring in the input. \param Input A string which will be searched. \param Search A substring to be searched for. \return An \c iterator_range delimiting the match. Returned iterator is either \c Range1T::iterator or \c Range1T::const_iterator, depending on the constness of the input parameter. \note This function provides the strong exception-safety guarantee */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> find_last( Range1T& Input, const Range2T& Search) { return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search)); } //! Find last algorithm ( case insensitive ) /*! Search for the last match a string in the input. Searching is case insensitive. \param Input A string which will be searched. \param Search A substring to be searched for. \param Loc A locale used for case insensitive comparison \return An \c iterator_range delimiting the match. Returned iterator is either \c Range1T::iterator or \c Range1T::const_iterator, depending on the constness of the input parameter. \note This function provides the strong exception-safety guarantee */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> ifind_last( Range1T& Input, const Range2T& Search, const std::locale& Loc=std::locale()) { return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search, is_iequal(Loc))); } // find_nth ----------------------------------------------------------------------// //! Find n-th algorithm /*! Search for the n-th (zero-indexed) occurrence of the substring in the input. \param Input A string which will be searched. \param Search A substring to be searched for. \param Nth An index (zero-indexed) of the match to be found. For negative N, the matches are counted from the end of string. \return An \c iterator_range delimiting the match. Returned iterator is either \c Range1T::iterator or \c Range1T::const_iterator, depending on the constness of the input parameter. */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> find_nth( Range1T& Input, const Range2T& Search, int Nth) { return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth)); } //! Find n-th algorithm ( case insensitive ). /*! Search for the n-th (zero-indexed) occurrence of the substring in the input. Searching is case insensitive. \param Input A string which will be searched. \param Search A substring to be searched for. \param Nth An index (zero-indexed) of the match to be found. For negative N, the matches are counted from the end of string. \param Loc A locale used for case insensitive comparison \return An \c iterator_range delimiting the match. Returned iterator is either \c Range1T::iterator or \c Range1T::const_iterator, depending on the constness of the input parameter. \note This function provides the strong exception-safety guarantee */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> ifind_nth( Range1T& Input, const Range2T& Search, int Nth, const std::locale& Loc=std::locale()) { return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth,is_iequal(Loc))); } // find_head ----------------------------------------------------------------------// //! Find head algorithm /*! Get the head of the input. Head is a prefix of the string of the given size. If the input is shorter then required, whole input is considered to be the head. \param Input An input string \param N Length of the head For N>=0, at most N characters are extracted. For N<0, at most size(Input)-|N| characters are extracted. \return An \c iterator_range delimiting the match. Returned iterator is either \c Range1T::iterator or \c Range1T::const_iterator, depending on the constness of the input parameter. \note This function provides the strong exception-safety guarantee */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> find_head( RangeT& Input, int N) { return ::boost::algorithm::find(Input, ::boost::algorithm::head_finder(N)); } // find_tail ----------------------------------------------------------------------// //! Find tail algorithm /*! Get the tail of the input. Tail is a suffix of the string of the given size. If the input is shorter then required, whole input is considered to be the tail. \param Input An input string \param N Length of the tail. For N>=0, at most N characters are extracted. For N<0, at most size(Input)-|N| characters are extracted. \return An \c iterator_range delimiting the match. Returned iterator is either \c RangeT::iterator or \c RangeT::const_iterator, depending on the constness of the input parameter. \note This function provides the strong exception-safety guarantee */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> find_tail( RangeT& Input, int N) { return ::boost::algorithm::find(Input, ::boost::algorithm::tail_finder(N)); } // find_token --------------------------------------------------------------------// //! Find token algorithm /*! Look for a given token in the string. Token is a character that matches the given predicate. If the "token compress mode" is enabled, adjacent tokens are considered to be one match. \param Input A input string. \param Pred A unary predicate to identify a token \param eCompress Enable/Disable compressing of adjacent tokens \return An \c iterator_range delimiting the match. Returned iterator is either \c RangeT::iterator or \c RangeT::const_iterator, depending on the constness of the input parameter. \note This function provides the strong exception-safety guarantee */ template inline iterator_range< BOOST_STRING_TYPENAME range_iterator::type> find_token( RangeT& Input, PredicateT Pred, token_compress_mode_type eCompress=token_compress_off) { return ::boost::algorithm::find(Input, ::boost::algorithm::token_finder(Pred, eCompress)); } } // namespace algorithm // pull names to the boost namespace using algorithm::find; using algorithm::find_first; using algorithm::ifind_first; using algorithm::find_last; using algorithm::ifind_last; using algorithm::find_nth; using algorithm::ifind_nth; using algorithm::find_head; using algorithm::find_tail; using algorithm::find_token; } // namespace boost #endif // BOOST_STRING_FIND_HPP find_format.hpp000444000765000024 2450612161110647 24612 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 find_iterator.hpp000444000765000024 3054112161110657 25150 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library find_iterator.hpp header file ---------------------------// // Copyright Pavol Droba 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/ for updates, documentation, and revision history. #ifndef BOOST_STRING_FIND_ITERATOR_HPP #define BOOST_STRING_FIND_ITERATOR_HPP #include #include #include #include #include #include #include #include #include /*! \file Defines find iterator classes. Find iterator repeatedly applies a Finder to the specified input string to search for matches. Dereferencing the iterator yields the current match or a range between the last and the current match depending on the iterator used. */ namespace boost { namespace algorithm { // find_iterator -----------------------------------------------// //! find_iterator /*! Find iterator encapsulates a Finder and allows for incremental searching in a string. Each increment moves the iterator to the next match. Find iterator is a readable forward traversal iterator. Dereferencing the iterator yields an iterator_range delimiting the current match. */ template class find_iterator : public iterator_facade< find_iterator, const iterator_range, forward_traversal_tag >, private detail::find_iterator_base { private: // facade support friend class ::boost::iterator_core_access; private: // typedefs typedef detail::find_iterator_base base_type; typedef BOOST_STRING_TYPENAME base_type::input_iterator_type input_iterator_type; typedef BOOST_STRING_TYPENAME base_type::match_type match_type; public: //! Default constructor /*! Construct null iterator. All null iterators are equal. \post eof()==true */ find_iterator() {} //! Copy constructor /*! Construct a copy of the find_iterator */ find_iterator( const find_iterator& Other ) : base_type(Other), m_Match(Other.m_Match), m_End(Other.m_End) {} //! Constructor /*! Construct new find_iterator for a given finder and a range. */ template find_iterator( IteratorT Begin, IteratorT End, FinderT Finder ) : detail::find_iterator_base(Finder,0), m_Match(Begin,Begin), m_End(End) { increment(); } //! Constructor /*! Construct new find_iterator for a given finder and a range. */ template find_iterator( RangeT& Col, FinderT Finder ) : detail::find_iterator_base(Finder,0) { iterator_range::type> lit_col(::boost::as_literal(Col)); m_Match=::boost::make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col)); m_End=::boost::end(lit_col); increment(); } private: // iterator operations // dereference const match_type& dereference() const { return m_Match; } // increment void increment() { if(m_Match.begin() == m_Match.end()) m_Match=this->do_find(m_Match.end(),m_End); else m_Match=this->do_find(m_Match.begin()+1,m_End); } // comparison bool equal( const find_iterator& Other ) const { bool bEof=eof(); bool bOtherEof=Other.eof(); return bEof || bOtherEof ? bEof==bOtherEof : ( m_Match==Other.m_Match && m_End==Other.m_End ); } public: // operations //! Eof check /*! Check the eof condition. Eof condition means that there is nothing more to be searched i.e. find_iterator is after the last match. */ bool eof() const { return this->is_null() || ( m_Match.begin() == m_End && m_Match.end() == m_End ); } private: // Attributes match_type m_Match; input_iterator_type m_End; }; //! find iterator construction helper /*! * Construct a find iterator to iterate through the specified string */ template inline find_iterator< BOOST_STRING_TYPENAME range_iterator::type> make_find_iterator( RangeT& Collection, FinderT Finder) { return find_iterator::type>( Collection, Finder); } // split iterator -----------------------------------------------// //! split_iterator /*! Split iterator encapsulates a Finder and allows for incremental searching in a string. Unlike the find iterator, split iterator iterates through gaps between matches. Find iterator is a readable forward traversal iterator. Dereferencing the iterator yields an iterator_range delimiting the current match. */ template class split_iterator : public iterator_facade< split_iterator, const iterator_range, forward_traversal_tag >, private detail::find_iterator_base { private: // facade support friend class ::boost::iterator_core_access; private: // typedefs typedef detail::find_iterator_base base_type; typedef BOOST_STRING_TYPENAME base_type::input_iterator_type input_iterator_type; typedef BOOST_STRING_TYPENAME base_type::match_type match_type; public: //! Default constructor /*! Construct null iterator. All null iterators are equal. \post eof()==true */ split_iterator() {} //! Copy constructor /*! Construct a copy of the split_iterator */ split_iterator( const split_iterator& Other ) : base_type(Other), m_Match(Other.m_Match), m_Next(Other.m_Next), m_End(Other.m_End), m_bEof(Other.m_bEof) {} //! Constructor /*! Construct new split_iterator for a given finder and a range. */ template split_iterator( IteratorT Begin, IteratorT End, FinderT Finder ) : detail::find_iterator_base(Finder,0), m_Match(Begin,Begin), m_Next(Begin), m_End(End), m_bEof(false) { // force the correct behavior for empty sequences and yield at least one token if(Begin!=End) { increment(); } } //! Constructor /*! Construct new split_iterator for a given finder and a collection. */ template split_iterator( RangeT& Col, FinderT Finder ) : detail::find_iterator_base(Finder,0), m_bEof(false) { iterator_range::type> lit_col(::boost::as_literal(Col)); m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col)); m_Next=::boost::begin(lit_col); m_End=::boost::end(lit_col); // force the correct behavior for empty sequences and yield at least one token if(m_Next!=m_End) { increment(); } } private: // iterator operations // dereference const match_type& dereference() const { return m_Match; } // increment void increment() { match_type FindMatch=this->do_find( m_Next, m_End ); if(FindMatch.begin()==m_End && FindMatch.end()==m_End) { if(m_Match.end()==m_End) { // Mark iterator as eof m_bEof=true; } } m_Match=match_type( m_Next, FindMatch.begin() ); m_Next=FindMatch.end(); } // comparison bool equal( const split_iterator& Other ) const { bool bEof=eof(); bool bOtherEof=Other.eof(); return bEof || bOtherEof ? bEof==bOtherEof : ( m_Match==Other.m_Match && m_Next==Other.m_Next && m_End==Other.m_End ); } public: // operations //! Eof check /*! Check the eof condition. Eof condition means that there is nothing more to be searched i.e. find_iterator is after the last match. */ bool eof() const { return this->is_null() || m_bEof; } private: // Attributes match_type m_Match; input_iterator_type m_Next; input_iterator_type m_End; bool m_bEof; }; //! split iterator construction helper /*! * Construct a split iterator to iterate through the specified collection */ template inline split_iterator< BOOST_STRING_TYPENAME range_iterator::type> make_split_iterator( RangeT& Collection, FinderT Finder) { return split_iterator::type>( Collection, Finder); } } // namespace algorithm // pull names to the boost namespace using algorithm::find_iterator; using algorithm::make_find_iterator; using algorithm::split_iterator; using algorithm::make_split_iterator; } // namespace boost #endif // BOOST_STRING_FIND_ITERATOR_HPP finder.hpp000444000765000024 2317712161110602 23563 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 formatter.hpp000444000765000024 1042712161110666 24323 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 formatting \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 formatted 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 iter_find.hpp000444000765000024 1654512161110603 24261 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library iter_find.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_ITER_FIND_HPP #define BOOST_STRING_ITER_FIND_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include /*! \file Defines generic split algorithms. Split algorithms can be used to divide a sequence into several part according to a given criteria. Result is given as a 'container of containers' where elements are copies or references to extracted parts. There are two algorithms provided. One iterates over matching substrings, the other one over the gaps between these matches. */ namespace boost { namespace algorithm { // iterate find ---------------------------------------------------// //! Iter find algorithm /*! This algorithm executes a given finder in iteration on the input, until the end of input is reached, or no match is found. Iteration is done using built-in find_iterator, so the real searching is performed only when needed. In each iteration new match is found and added to the result. \param Result A 'container container' to contain the result of search. Both outer and inner container must have constructor taking a pair of iterators as an argument. Typical type of the result is \c std::vector> (each element of such a vector will container a range delimiting a match). \param Input A container which will be searched. \param Finder A Finder object used for searching \return A reference to the result \note Prior content of the result will be overwritten. */ template< typename SequenceSequenceT, typename RangeT, typename FinderT > inline SequenceSequenceT& iter_find( SequenceSequenceT& Result, RangeT& Input, FinderT Finder ) { BOOST_CONCEPT_ASSERT(( FinderConcept< FinderT, BOOST_STRING_TYPENAME range_iterator::type> )); iterator_range::type> lit_input(::boost::as_literal(Input)); typedef BOOST_STRING_TYPENAME range_iterator::type input_iterator_type; typedef find_iterator find_iterator_type; typedef detail::copy_iterator_rangeF< BOOST_STRING_TYPENAME range_value::type, input_iterator_type> copy_range_type; input_iterator_type InputEnd=::boost::end(lit_input); typedef transform_iterator transform_iter_type; transform_iter_type itBegin= ::boost::make_transform_iterator( find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ), copy_range_type()); transform_iter_type itEnd= ::boost::make_transform_iterator( find_iterator_type(), copy_range_type()); SequenceSequenceT Tmp(itBegin, itEnd); Result.swap(Tmp); return Result; } // iterate split ---------------------------------------------------// //! Split find algorithm /*! This algorithm executes a given finder in iteration on the input, until the end of input is reached, or no match is found. Iteration is done using built-in find_iterator, so the real searching is performed only when needed. Each match is used as a separator of segments. These segments are then returned in the result. \param Result A 'container container' to contain the result of search. Both outer and inner container must have constructor taking a pair of iterators as an argument. Typical type of the result is \c std::vector> (each element of such a vector will container a range delimiting a match). \param Input A container which will be searched. \param Finder A finder object used for searching \return A reference to the result \note Prior content of the result will be overwritten. */ template< typename SequenceSequenceT, typename RangeT, typename FinderT > inline SequenceSequenceT& iter_split( SequenceSequenceT& Result, RangeT& Input, FinderT Finder ) { BOOST_CONCEPT_ASSERT(( FinderConcept::type> )); iterator_range::type> lit_input(::boost::as_literal(Input)); typedef BOOST_STRING_TYPENAME range_iterator::type input_iterator_type; typedef split_iterator find_iterator_type; typedef detail::copy_iterator_rangeF< BOOST_STRING_TYPENAME range_value::type, input_iterator_type> copy_range_type; input_iterator_type InputEnd=::boost::end(lit_input); typedef transform_iterator transform_iter_type; transform_iter_type itBegin= ::boost::make_transform_iterator( find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ), copy_range_type() ); transform_iter_type itEnd= ::boost::make_transform_iterator( find_iterator_type(), copy_range_type() ); SequenceSequenceT Tmp(itBegin, itEnd); Result.swap(Tmp); return Result; } } // namespace algorithm // pull names to the boost namespace using algorithm::iter_find; using algorithm::iter_split; } // namespace boost #endif // BOOST_STRING_ITER_FIND_HPP join.hpp000444000765000024 1210712161110641 23245 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library join.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_JOIN_HPP #define BOOST_STRING_JOIN_HPP #include #include #include #include /*! \file Defines join algorithm. Join algorithm is a counterpart to split algorithms. It joins strings from a 'list' by adding user defined separator. Additionally there is a version that allows simple filtering by providing a predicate. */ namespace boost { namespace algorithm { // join --------------------------------------------------------------// //! Join algorithm /*! This algorithm joins all strings in a 'list' into one long string. Segments are concatenated by given separator. \param Input A container that holds the input strings. It must be a container-of-containers. \param Separator A string that will separate the joined segments. \return Concatenated string. \note This function provides the strong exception-safety guarantee */ template< typename SequenceSequenceT, typename Range1T> inline typename range_value::type join( const SequenceSequenceT& Input, const Range1T& Separator) { // Define working types typedef typename range_value::type ResultT; typedef typename range_const_iterator::type InputIteratorT; // Parse input InputIteratorT itBegin=::boost::begin(Input); InputIteratorT itEnd=::boost::end(Input); // Construct container to hold the result ResultT Result; // Append first element if(itBegin!=itEnd) { detail::insert(Result, ::boost::end(Result), *itBegin); ++itBegin; } for(;itBegin!=itEnd; ++itBegin) { // Add separator detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator)); // Add element detail::insert(Result, ::boost::end(Result), *itBegin); } return Result; } // join_if ----------------------------------------------------------// //! Conditional join algorithm /*! This algorithm joins all strings in a 'list' into one long string. Segments are concatenated by given separator. Only segments that satisfy the predicate will be added to the result. \param Input A container that holds the input strings. It must be a container-of-containers. \param Separator A string that will separate the joined segments. \param Pred A segment selection predicate \return Concatenated string. \note This function provides the strong exception-safety guarantee */ template< typename SequenceSequenceT, typename Range1T, typename PredicateT> inline typename range_value::type join_if( const SequenceSequenceT& Input, const Range1T& Separator, PredicateT Pred) { // Define working types typedef typename range_value::type ResultT; typedef typename range_const_iterator::type InputIteratorT; // Parse input InputIteratorT itBegin=::boost::begin(Input); InputIteratorT itEnd=::boost::end(Input); // Construct container to hold the result ResultT Result; // Roll to the first element that will be added while(itBegin!=itEnd && !Pred(*itBegin)) ++itBegin; // Add this element if(itBegin!=itEnd) { detail::insert(Result, ::boost::end(Result), *itBegin); ++itBegin; } for(;itBegin!=itEnd; ++itBegin) { if(Pred(*itBegin)) { // Add separator detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator)); // Add element detail::insert(Result, ::boost::end(Result), *itBegin); } } return Result; } } // namespace algorithm // pull names to the boost namespace using algorithm::join; using algorithm::join_if; } // namespace boost #endif // BOOST_STRING_JOIN_HPP predicate.hpp000444000765000024 4263512161110650 24257 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library predicate.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_PREDICATE_HPP #define BOOST_STRING_PREDICATE_HPP #include #include #include #include #include #include #include #include #include #include /*! \file boost/algorithm/string/predicate.hpp Defines string-related predicates. The predicates determine whether a substring is contained in the input string under various conditions: a string starts with the substring, ends with the substring, simply contains the substring or if both strings are equal. Additionaly the algorithm \c all() checks all elements of a container to satisfy a condition. All predicates provide the strong exception guarantee. */ namespace boost { namespace algorithm { // starts_with predicate -----------------------------------------------// //! 'Starts with' predicate /*! This predicate holds when the test string is a prefix of the Input. In other words, if the input starts with the test. When the optional predicate is specified, it is used for character-wise comparison. \param Input An input sequence \param Test A test sequence \param Comp An element comparison predicate \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool starts_with( const Range1T& Input, const Range2T& Test, PredicateT Comp) { iterator_range::type> lit_input(::boost::as_literal(Input)); iterator_range::type> lit_test(::boost::as_literal(Test)); typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator1T; typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator2T; Iterator1T InputEnd=::boost::end(lit_input); Iterator2T TestEnd=::boost::end(lit_test); Iterator1T it=::boost::begin(lit_input); Iterator2T pit=::boost::begin(lit_test); for(; it!=InputEnd && pit!=TestEnd; ++it,++pit) { if( !(Comp(*it,*pit)) ) return false; } return pit==TestEnd; } //! 'Starts with' predicate /*! \overload */ template inline bool starts_with( const Range1T& Input, const Range2T& Test) { return ::boost::algorithm::starts_with(Input, Test, is_equal()); } //! 'Starts with' predicate ( case insensitive ) /*! This predicate holds when the test string is a prefix of the Input. In other words, if the input starts with the test. Elements are compared case insensitively. \param Input An input sequence \param Test A test sequence \param Loc A locale used for case insensitive comparison \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool istarts_with( const Range1T& Input, const Range2T& Test, const std::locale& Loc=std::locale()) { return ::boost::algorithm::starts_with(Input, Test, is_iequal(Loc)); } // ends_with predicate -----------------------------------------------// //! 'Ends with' predicate /*! This predicate holds when the test string is a suffix of the Input. In other words, if the input ends with the test. When the optional predicate is specified, it is used for character-wise comparison. \param Input An input sequence \param Test A test sequence \param Comp An element comparison predicate \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool ends_with( const Range1T& Input, const Range2T& Test, PredicateT Comp) { iterator_range::type> lit_input(::boost::as_literal(Input)); iterator_range::type> lit_test(::boost::as_literal(Test)); typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator1T; typedef BOOST_STRING_TYPENAME boost::detail:: iterator_traits::iterator_category category; return detail:: ends_with_iter_select( ::boost::begin(lit_input), ::boost::end(lit_input), ::boost::begin(lit_test), ::boost::end(lit_test), Comp, category()); } //! 'Ends with' predicate /*! \overload */ template inline bool ends_with( const Range1T& Input, const Range2T& Test) { return ::boost::algorithm::ends_with(Input, Test, is_equal()); } //! 'Ends with' predicate ( case insensitive ) /*! This predicate holds when the test container is a suffix of the Input. In other words, if the input ends with the test. Elements are compared case insensitively. \param Input An input sequence \param Test A test sequence \param Loc A locale used for case insensitive comparison \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool iends_with( const Range1T& Input, const Range2T& Test, const std::locale& Loc=std::locale()) { return ::boost::algorithm::ends_with(Input, Test, is_iequal(Loc)); } // contains predicate -----------------------------------------------// //! 'Contains' predicate /*! This predicate holds when the test container is contained in the Input. When the optional predicate is specified, it is used for character-wise comparison. \param Input An input sequence \param Test A test sequence \param Comp An element comparison predicate \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool contains( const Range1T& Input, const Range2T& Test, PredicateT Comp) { iterator_range::type> lit_input(::boost::as_literal(Input)); iterator_range::type> lit_test(::boost::as_literal(Test)); if (::boost::empty(lit_test)) { // Empty range is contained always return true; } // Use the temporary variable to make VACPP happy bool bResult=(::boost::algorithm::first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input))); return bResult; } //! 'Contains' predicate /*! \overload */ template inline bool contains( const Range1T& Input, const Range2T& Test) { return ::boost::algorithm::contains(Input, Test, is_equal()); } //! 'Contains' predicate ( case insensitive ) /*! This predicate holds when the test container is contained in the Input. Elements are compared case insensitively. \param Input An input sequence \param Test A test sequence \param Loc A locale used for case insensitive comparison \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool icontains( const Range1T& Input, const Range2T& Test, const std::locale& Loc=std::locale()) { return ::boost::algorithm::contains(Input, Test, is_iequal(Loc)); } // equals predicate -----------------------------------------------// //! 'Equals' predicate /*! This predicate holds when the test container is equal to the input container i.e. all elements in both containers are same. When the optional predicate is specified, it is used for character-wise comparison. \param Input An input sequence \param Test A test sequence \param Comp An element comparison predicate \return The result of the test \note This is a two-way version of \c std::equal algorithm \note This function provides the strong exception-safety guarantee */ template inline bool equals( const Range1T& Input, const Range2T& Test, PredicateT Comp) { iterator_range::type> lit_input(::boost::as_literal(Input)); iterator_range::type> lit_test(::boost::as_literal(Test)); typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator1T; typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator2T; Iterator1T InputEnd=::boost::end(lit_input); Iterator2T TestEnd=::boost::end(lit_test); Iterator1T it=::boost::begin(lit_input); Iterator2T pit=::boost::begin(lit_test); for(; it!=InputEnd && pit!=TestEnd; ++it,++pit) { if( !(Comp(*it,*pit)) ) return false; } return (pit==TestEnd) && (it==InputEnd); } //! 'Equals' predicate /*! \overload */ template inline bool equals( const Range1T& Input, const Range2T& Test) { return ::boost::algorithm::equals(Input, Test, is_equal()); } //! 'Equals' predicate ( case insensitive ) /*! This predicate holds when the test container is equal to the input container i.e. all elements in both containers are same. Elements are compared case insensitively. \param Input An input sequence \param Test A test sequence \param Loc A locale used for case insensitive comparison \return The result of the test \note This is a two-way version of \c std::equal algorithm \note This function provides the strong exception-safety guarantee */ template inline bool iequals( const Range1T& Input, const Range2T& Test, const std::locale& Loc=std::locale()) { return ::boost::algorithm::equals(Input, Test, is_iequal(Loc)); } // lexicographical_compare predicate -----------------------------// //! Lexicographical compare predicate /*! This predicate is an overload of std::lexicographical_compare for range arguments It check whether the first argument is lexicographically less then the second one. If the optional predicate is specified, it is used for character-wise comparison \param Arg1 First argument \param Arg2 Second argument \param Pred Comparison predicate \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool lexicographical_compare( const Range1T& Arg1, const Range2T& Arg2, PredicateT Pred) { iterator_range::type> lit_arg1(::boost::as_literal(Arg1)); iterator_range::type> lit_arg2(::boost::as_literal(Arg2)); return std::lexicographical_compare( ::boost::begin(lit_arg1), ::boost::end(lit_arg1), ::boost::begin(lit_arg2), ::boost::end(lit_arg2), Pred); } //! Lexicographical compare predicate /*! \overload */ template inline bool lexicographical_compare( const Range1T& Arg1, const Range2T& Arg2) { return ::boost::algorithm::lexicographical_compare(Arg1, Arg2, is_less()); } //! Lexicographical compare predicate (case-insensitive) /*! This predicate is an overload of std::lexicographical_compare for range arguments. It check whether the first argument is lexicographically less then the second one. Elements are compared case insensitively \param Arg1 First argument \param Arg2 Second argument \param Loc A locale used for case insensitive comparison \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool ilexicographical_compare( const Range1T& Arg1, const Range2T& Arg2, const std::locale& Loc=std::locale()) { return ::boost::algorithm::lexicographical_compare(Arg1, Arg2, is_iless(Loc)); } // all predicate -----------------------------------------------// //! 'All' predicate /*! This predicate holds it all its elements satisfy a given condition, represented by the predicate. \param Input An input sequence \param Pred A predicate \return The result of the test \note This function provides the strong exception-safety guarantee */ template inline bool all( const RangeT& Input, PredicateT Pred) { iterator_range::type> lit_input(::boost::as_literal(Input)); typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator1T; Iterator1T InputEnd=::boost::end(lit_input); for( Iterator1T It=::boost::begin(lit_input); It!=InputEnd; ++It) { if (!Pred(*It)) return false; } return true; } } // namespace algorithm // pull names to the boost namespace using algorithm::starts_with; using algorithm::istarts_with; using algorithm::ends_with; using algorithm::iends_with; using algorithm::contains; using algorithm::icontains; using algorithm::equals; using algorithm::iequals; using algorithm::all; using algorithm::lexicographical_compare; using algorithm::ilexicographical_compare; } // namespace boost #endif // BOOST_STRING_PREDICATE_HPP predicate_facade.hpp000444000765000024 252412161110666 25522 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library predicate_facade.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_PREDICATE_FACADE_HPP #define BOOST_STRING_PREDICATE_FACADE_HPP #include /* \file boost/algorith/string/predicate_facade.hpp This file contains predicate_facade definition. This template class is used to identify classification predicates, so they can be combined using composition operators. */ namespace boost { namespace algorithm { // predicate facade ------------------------------------------------------// //! Predicate facade /*! This class allows to recognize classification predicates, so that they can be combined using composition operators. Every classification predicate must be derived from this class. */ template struct predicate_facade {}; } // namespace algorithm } // namespace boost #endif // BOOST_STRING_CLASSIFICATION_DETAIL_HPP replace.hpp000444000765000024 11016212161110616 23743 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 sequence_traits.hpp000444000765000024 1546312161110603 25512 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 split.hpp000444000765000024 1511712161110651 23446 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library split.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_SPLIT_HPP #define BOOST_STRING_SPLIT_HPP #include #include #include #include /*! \file Defines basic split algorithms. Split algorithms can be used to divide a string into several parts according to given criteria. Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are \c std::vector or \c std::list> */ namespace boost { namespace algorithm { // find_all ------------------------------------------------------------// //! Find all algorithm /*! This algorithm finds all occurrences of the search string in the input. Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are \c std::vector or \c std::list> \param Result A container that can hold copies of references to the substrings \param Input A container which will be searched. \param Search A substring to be searched for. \return A reference the result \note Prior content of the result will be overwritten. \note This function provides the strong exception-safety guarantee */ template< typename SequenceSequenceT, typename Range1T, typename Range2T > inline SequenceSequenceT& find_all( SequenceSequenceT& Result, Range1T& Input, const Range2T& Search) { return ::boost::algorithm::iter_find( Result, Input, ::boost::algorithm::first_finder(Search) ); } //! Find all algorithm ( case insensitive ) /*! This algorithm finds all occurrences of the search string in the input. Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are \c std::vector or \c std::list> Searching is case insensitive. \param Result A container that can hold copies of references to the substrings \param Input A container which will be searched. \param Search A substring to be searched for. \param Loc A locale used for case insensitive comparison \return A reference the result \note Prior content of the result will be overwritten. \note This function provides the strong exception-safety guarantee */ template< typename SequenceSequenceT, typename Range1T, typename Range2T > inline SequenceSequenceT& ifind_all( SequenceSequenceT& Result, Range1T& Input, const Range2T& Search, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::iter_find( Result, Input, ::boost::algorithm::first_finder(Search, is_iequal(Loc) ) ); } // tokenize -------------------------------------------------------------// //! Split algorithm /*! Tokenize expression. This function is equivalent to C strtok. Input sequence is split into tokens, separated by separators. Separators are given by means of the predicate. Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are \c std::vector or \c std::list> \param Result A container that can hold copies of references to the substrings \param Input A container which will be searched. \param Pred A predicate to identify separators. This predicate is supposed to return true if a given element is a separator. \param eCompress If eCompress argument is set to token_compress_on, adjacent separators are merged together. Otherwise, every two separators delimit a token. \return A reference the result \note Prior content of the result will be overwritten. \note This function provides the strong exception-safety guarantee */ template< typename SequenceSequenceT, typename RangeT, typename PredicateT > inline SequenceSequenceT& split( SequenceSequenceT& Result, RangeT& Input, PredicateT Pred, token_compress_mode_type eCompress=token_compress_off ) { return ::boost::algorithm::iter_split( Result, Input, ::boost::algorithm::token_finder( Pred, eCompress ) ); } } // namespace algorithm // pull names to the boost namespace using algorithm::find_all; using algorithm::ifind_all; using algorithm::split; } // namespace boost #endif // BOOST_STRING_SPLIT_HPP std_containers_traits.hpp000444000765000024 153612161110607 26701 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library std_containers_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_STD_CONTAINERS_TRAITS_HPP #define BOOST_STRING_STD_CONTAINERS_TRAITS_HPP /*!\file This file includes sequence traits for stl containers. */ #include #include #include #ifdef BOOST_HAS_SLIST # include #endif #endif // BOOST_STRING_STD_CONTAINERS_TRAITS_HPP trim.hpp000444000765000024 3436612161110672 23300 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// Boost string_algo library trim.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_TRIM_HPP #define BOOST_STRING_TRIM_HPP #include #include #include #include #include #include #include #include #include /*! \file Defines trim algorithms. Trim algorithms are used to remove trailing and leading spaces from a sequence (string). Space is recognized using given locales. Parametric (\c _if) variants use a predicate (functor) to select which characters are to be trimmed.. Functions take a selection predicate as a parameter, which is used to determine whether a character is a space. Common predicates are provided in classification.hpp header. */ namespace boost { namespace algorithm { // left trim -----------------------------------------------// //! Left trim - parametric /*! Remove all leading spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The result is a trimmed copy of the input. It is returned as a sequence or copied to the output iterator \param Output An output iterator to which the result will be copied \param Input An input range \param IsSpace A unary predicate identifying spaces \return An output iterator pointing just after the last inserted character or a copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template inline OutputIteratorT trim_left_copy_if( OutputIteratorT Output, const RangeT& Input, PredicateT IsSpace) { iterator_range::type> lit_range(::boost::as_literal(Input)); std::copy( ::boost::algorithm::detail::trim_begin( ::boost::begin(lit_range), ::boost::end(lit_range), IsSpace ), ::boost::end(lit_range), Output); return Output; } //! Left trim - parametric /*! \overload */ template inline SequenceT trim_left_copy_if(const SequenceT& Input, PredicateT IsSpace) { return SequenceT( ::boost::algorithm::detail::trim_begin( ::boost::begin(Input), ::boost::end(Input), IsSpace ), ::boost::end(Input)); } //! Left trim - parametric /*! Remove all leading spaces from the input. The result is a trimmed copy of the input. \param Input An input sequence \param Loc a locale used for 'space' classification \return A trimmed copy of the input \note This function provides the strong exception-safety guarantee */ template inline SequenceT trim_left_copy(const SequenceT& Input, const std::locale& Loc=std::locale()) { return ::boost::algorithm::trim_left_copy_if( Input, is_space(Loc)); } //! Left trim /*! Remove all leading spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The input sequence is modified in-place. \param Input An input sequence \param IsSpace A unary predicate identifying spaces */ template inline void trim_left_if(SequenceT& Input, PredicateT IsSpace) { Input.erase( ::boost::begin(Input), ::boost::algorithm::detail::trim_begin( ::boost::begin(Input), ::boost::end(Input), IsSpace)); } //! Left trim /*! Remove all leading spaces from the input. The Input sequence is modified in-place. \param Input An input sequence \param Loc A locale used for 'space' classification */ template inline void trim_left(SequenceT& Input, const std::locale& Loc=std::locale()) { ::boost::algorithm::trim_left_if( Input, is_space(Loc)); } // right trim -----------------------------------------------// //! Right trim - parametric /*! Remove all trailing spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The result is a trimmed copy of the input. It is returned as a sequence or copied to the output iterator \param Output An output iterator to which the result will be copied \param Input An input range \param IsSpace A unary predicate identifying spaces \return An output iterator pointing just after the last inserted character or a copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template inline OutputIteratorT trim_right_copy_if( OutputIteratorT Output, const RangeT& Input, PredicateT IsSpace ) { iterator_range::type> lit_range(::boost::as_literal(Input)); std::copy( ::boost::begin(lit_range), ::boost::algorithm::detail::trim_end( ::boost::begin(lit_range), ::boost::end(lit_range), IsSpace ), Output ); return Output; } //! Right trim - parametric /*! \overload */ template inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace) { return SequenceT( ::boost::begin(Input), ::boost::algorithm::detail::trim_end( ::boost::begin(Input), ::boost::end(Input), IsSpace) ); } //! Right trim /*! Remove all trailing spaces from the input. The result is a trimmed copy of the input \param Input An input sequence \param Loc A locale used for 'space' classification \return A trimmed copy of the input \note This function provides the strong exception-safety guarantee */ template inline SequenceT trim_right_copy(const SequenceT& Input, const std::locale& Loc=std::locale()) { return ::boost::algorithm::trim_right_copy_if( Input, is_space(Loc)); } //! Right trim - parametric /*! Remove all trailing spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The input sequence is modified in-place. \param Input An input sequence \param IsSpace A unary predicate identifying spaces */ template inline void trim_right_if(SequenceT& Input, PredicateT IsSpace) { Input.erase( ::boost::algorithm::detail::trim_end( ::boost::begin(Input), ::boost::end(Input), IsSpace ), ::boost::end(Input) ); } //! Right trim /*! Remove all trailing spaces from the input. The input sequence is modified in-place. \param Input An input sequence \param Loc A locale used for 'space' classification */ template inline void trim_right(SequenceT& Input, const std::locale& Loc=std::locale()) { ::boost::algorithm::trim_right_if( Input, is_space(Loc) ); } // both side trim -----------------------------------------------// //! Trim - parametric /*! Remove all trailing and leading spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The result is a trimmed copy of the input. It is returned as a sequence or copied to the output iterator \param Output An output iterator to which the result will be copied \param Input An input range \param IsSpace A unary predicate identifying spaces \return An output iterator pointing just after the last inserted character or a copy of the input \note The second variant of this function provides the strong exception-safety guarantee */ template inline OutputIteratorT trim_copy_if( OutputIteratorT Output, const RangeT& Input, PredicateT IsSpace) { iterator_range::type> lit_range(::boost::as_literal(Input)); BOOST_STRING_TYPENAME range_const_iterator::type TrimEnd= ::boost::algorithm::detail::trim_end( ::boost::begin(lit_range), ::boost::end(lit_range), IsSpace); std::copy( detail::trim_begin( ::boost::begin(lit_range), TrimEnd, IsSpace), TrimEnd, Output ); return Output; } //! Trim - parametric /*! \overload */ template inline SequenceT trim_copy_if(const SequenceT& Input, PredicateT IsSpace) { BOOST_STRING_TYPENAME range_const_iterator::type TrimEnd= ::boost::algorithm::detail::trim_end( ::boost::begin(Input), ::boost::end(Input), IsSpace); return SequenceT( detail::trim_begin( ::boost::begin(Input), TrimEnd, IsSpace), TrimEnd ); } //! Trim /*! Remove all leading and trailing spaces from the input. The result is a trimmed copy of the input \param Input An input sequence \param Loc A locale used for 'space' classification \return A trimmed copy of the input \note This function provides the strong exception-safety guarantee */ template inline SequenceT trim_copy( const SequenceT& Input, const std::locale& Loc=std::locale() ) { return ::boost::algorithm::trim_copy_if( Input, is_space(Loc) ); } //! Trim /*! Remove all leading and trailing spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The input sequence is modified in-place. \param Input An input sequence \param IsSpace A unary predicate identifying spaces */ template inline void trim_if(SequenceT& Input, PredicateT IsSpace) { ::boost::algorithm::trim_right_if( Input, IsSpace ); ::boost::algorithm::trim_left_if( Input, IsSpace ); } //! Trim /*! Remove all leading and trailing spaces from the input. The input sequence is modified in-place. \param Input An input sequence \param Loc A locale used for 'space' classification */ template inline void trim(SequenceT& Input, const std::locale& Loc=std::locale()) { ::boost::algorithm::trim_if( Input, is_space( Loc ) ); } } // namespace algorithm // pull names to the boost namespace using algorithm::trim_left; using algorithm::trim_left_if; using algorithm::trim_left_copy; using algorithm::trim_left_copy_if; using algorithm::trim_right; using algorithm::trim_right_if; using algorithm::trim_right_copy; using algorithm::trim_right_copy_if; using algorithm::trim; using algorithm::trim_if; using algorithm::trim_copy; using algorithm::trim_copy_if; } // namespace boost #endif // BOOST_STRING_TRIM_HPP yes_no_type.hpp000444000765000024 201012161110656 24621 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string// 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 detail000755000765000024 012161110660 22662 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/stringcase_conv.hpp000444000765000024 1046212161110651 25513 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// Boost string_algo library string_funct.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_CASE_CONV_DETAIL_HPP #define BOOST_STRING_CASE_CONV_DETAIL_HPP #include #include #include #include namespace boost { namespace algorithm { namespace detail { // case conversion functors -----------------------------------------------// #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) #pragma warning(push) #pragma warning(disable:4512) //assignment operator could not be generated #endif // a tolower functor template struct to_lowerF : public std::unary_function { // Constructor to_lowerF( const std::locale& Loc ) : m_Loc( &Loc ) {} // Operation CharT operator ()( CharT Ch ) const { #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL) return std::tolower( static_cast::type> ( Ch )); #else return std::tolower( Ch, *m_Loc ); #endif } private: const std::locale* m_Loc; }; // a toupper functor template struct to_upperF : public std::unary_function { // Constructor to_upperF( const std::locale& Loc ) : m_Loc( &Loc ) {} // Operation CharT operator ()( CharT Ch ) const { #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL) return std::toupper( static_cast::type> ( Ch )); #else return std::toupper( Ch, *m_Loc ); #endif } private: const std::locale* m_Loc; }; #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) #pragma warning(pop) #endif // algorithm implementation ------------------------------------------------------------------------- // Transform a range template OutputIteratorT transform_range_copy( OutputIteratorT Output, const RangeT& Input, FunctorT Functor) { return std::transform( ::boost::begin(Input), ::boost::end(Input), Output, Functor); } // Transform a range (in-place) template void transform_range( const RangeT& Input, FunctorT Functor) { std::transform( ::boost::begin(Input), ::boost::end(Input), ::boost::begin(Input), Functor); } template inline SequenceT transform_range_copy( const RangeT& Input, FunctorT Functor) { return SequenceT( ::boost::make_transform_iterator( ::boost::begin(Input), Functor), ::boost::make_transform_iterator( ::boost::end(Input), Functor)); } } // namespace detail } // namespace algorithm } // namespace boost #endif // BOOST_STRING_CASE_CONV_DETAIL_HPP classification.hpp000444000765000024 3063012161110646 26551 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// Boost string_algo library classification.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_CLASSIFICATION_DETAIL_HPP #define BOOST_STRING_CLASSIFICATION_DETAIL_HPP #include #include #include #include #include #include #include #include namespace boost { namespace algorithm { namespace detail { // classification functors -----------------------------------------------// // is_classified functor struct is_classifiedF : public predicate_facade { // Boost.ResultOf support typedef bool result_type; // Constructor from a locale is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) : m_Type(Type), m_Locale(Loc) {} // Operation template bool operator()( CharT Ch ) const { return std::use_facet< std::ctype >(m_Locale).is( m_Type, Ch ); } #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x582) && !defined(_USE_OLD_RW_STL) template<> bool operator()( char const Ch ) const { return std::use_facet< std::ctype >(m_Locale).is( m_Type, Ch ); } #endif private: std::ctype_base::mask m_Type; std::locale m_Locale; }; // is_any_of functor /* returns true if the value is from the specified set */ template struct is_any_ofF : public predicate_facade > { private: // set cannot operate on const value-type typedef typename ::boost::remove_const::type set_value_type; public: // Boost.ResultOf support typedef bool result_type; // Constructor template is_any_ofF( const RangeT& Range ) : m_Size(0) { // Prepare storage m_Storage.m_dynSet=0; std::size_t Size=::boost::distance(Range); m_Size=Size; set_value_type* Storage=0; if(use_fixed_storage(m_Size)) { // Use fixed storage Storage=&m_Storage.m_fixSet[0]; } else { // Use dynamic storage m_Storage.m_dynSet=new set_value_type[m_Size]; Storage=m_Storage.m_dynSet; } // Use fixed storage ::std::copy(::boost::begin(Range), ::boost::end(Range), Storage); ::std::sort(Storage, Storage+m_Size); } // Copy constructor is_any_ofF(const is_any_ofF& Other) : m_Size(Other.m_Size) { // Prepare storage m_Storage.m_dynSet=0; const set_value_type* SrcStorage=0; set_value_type* DestStorage=0; if(use_fixed_storage(m_Size)) { // Use fixed storage DestStorage=&m_Storage.m_fixSet[0]; SrcStorage=&Other.m_Storage.m_fixSet[0]; } else { // Use dynamic storage m_Storage.m_dynSet=new set_value_type[m_Size]; DestStorage=m_Storage.m_dynSet; SrcStorage=Other.m_Storage.m_dynSet; } // Use fixed storage ::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size); } // Destructor ~is_any_ofF() { if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0) { delete [] m_Storage.m_dynSet; } } // Assignment is_any_ofF& operator=(const is_any_ofF& Other) { // Handle self assignment if(this==&Other) return *this; // Prepare storage const set_value_type* SrcStorage; set_value_type* DestStorage; if(use_fixed_storage(Other.m_Size)) { // Use fixed storage DestStorage=&m_Storage.m_fixSet[0]; SrcStorage=&Other.m_Storage.m_fixSet[0]; // Delete old storage if was present if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0) { delete [] m_Storage.m_dynSet; } // Set new size m_Size=Other.m_Size; } else { // Other uses dynamic storage SrcStorage=Other.m_Storage.m_dynSet; // Check what kind of storage are we using right now if(use_fixed_storage(m_Size)) { // Using fixed storage, allocate new set_value_type* pTemp=new set_value_type[Other.m_Size]; DestStorage=pTemp; m_Storage.m_dynSet=pTemp; m_Size=Other.m_Size; } else { // Using dynamic storage, check if can reuse if(m_Storage.m_dynSet!=0 && m_Size>=Other.m_Size && m_Size bool operator()( Char2T Ch ) const { const set_value_type* Storage= (use_fixed_storage(m_Size)) ? &m_Storage.m_fixSet[0] : m_Storage.m_dynSet; return ::std::binary_search(Storage, Storage+m_Size, Ch); } private: // check if the size is eligible for fixed storage static bool use_fixed_storage(std::size_t size) { return size<=sizeof(set_value_type*)*2; } private: // storage // The actual used storage is selected on the type union { set_value_type* m_dynSet; set_value_type m_fixSet[sizeof(set_value_type*)*2]; } m_Storage; // storage size ::std::size_t m_Size; }; // is_from_range functor /* returns true if the value is from the specified range. (i.e. x>=From && x>=To) */ template struct is_from_rangeF : public predicate_facade< is_from_rangeF > { // Boost.ResultOf support typedef bool result_type; // Constructor is_from_rangeF( CharT From, CharT To ) : m_From(From), m_To(To) {} // Operation template bool operator()( Char2T Ch ) const { return ( m_From <= Ch ) && ( Ch <= m_To ); } private: CharT m_From; CharT m_To; }; // class_and composition predicate template struct pred_andF : public predicate_facade< pred_andF > { public: // Boost.ResultOf support typedef bool result_type; // Constructor pred_andF( Pred1T Pred1, Pred2T Pred2 ) : m_Pred1(Pred1), m_Pred2(Pred2) {} // Operation template bool operator()( CharT Ch ) const { return m_Pred1(Ch) && m_Pred2(Ch); } private: Pred1T m_Pred1; Pred2T m_Pred2; }; // class_or composition predicate template struct pred_orF : public predicate_facade< pred_orF > { public: // Boost.ResultOf support typedef bool result_type; // Constructor pred_orF( Pred1T Pred1, Pred2T Pred2 ) : m_Pred1(Pred1), m_Pred2(Pred2) {} // Operation template bool operator()( CharT Ch ) const { return m_Pred1(Ch) || m_Pred2(Ch); } private: Pred1T m_Pred1; Pred2T m_Pred2; }; // class_not composition predicate template< typename PredT > struct pred_notF : public predicate_facade< pred_notF > { public: // Boost.ResultOf support typedef bool result_type; // Constructor pred_notF( PredT Pred ) : m_Pred(Pred) {} // Operation template bool operator()( CharT Ch ) const { return !m_Pred(Ch); } private: PredT m_Pred; }; } // namespace detail } // namespace algorithm } // namespace boost #endif // BOOST_STRING_CLASSIFICATION_DETAIL_HPP find_format.hpp000444000765000024 1733212161110620 26042 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// 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 formatted 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 boost::algorithm::detail::insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() ); // Copy formatted result boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() ); // Copy the rest of the sequence boost::algorithm::detail::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 find_format_all.hpp000444000765000024 2445012161110660 26675 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// 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 formatted 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 boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, M.begin() ); // Copy formatted result boost::algorithm::detail::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 formatted 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 find_format_store.hpp000444000765000024 625212161110645 27244 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// 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 find_iterator.hpp000444000765000024 537712161110651 26375 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// Boost string_algo library find_iterator.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_ITERATOR_DETAIL_HPP #define BOOST_STRING_FIND_ITERATOR_DETAIL_HPP #include #include #include #include #include namespace boost { namespace algorithm { namespace detail { // find_iterator base -----------------------------------------------// // Find iterator base template class find_iterator_base { protected: // typedefs typedef IteratorT input_iterator_type; typedef iterator_range match_type; typedef function2< match_type, input_iterator_type, input_iterator_type> finder_type; protected: // Protected construction/destruction // Default constructor find_iterator_base() {}; // Copy construction find_iterator_base( const find_iterator_base& Other ) : m_Finder(Other.m_Finder) {} // Constructor template find_iterator_base( FinderT Finder, int ) : m_Finder(Finder) {} // Destructor ~find_iterator_base() {} // Find operation match_type do_find( input_iterator_type Begin, input_iterator_type End ) const { if (!m_Finder.empty()) { return m_Finder(Begin,End); } else { return match_type(End,End); } } // Check bool is_null() const { return m_Finder.empty(); } private: // Finder finder_type m_Finder; }; } // namespace detail } // namespace algorithm } // namespace boost #endif // BOOST_STRING_FIND_ITERATOR_DETAIL_HPP finder.hpp000444000765000024 5701712161110604 25027 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// 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 subsequence 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 formatter.hpp000444000765000024 753412161110610 25537 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// 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 predicate.hpp000444000765000024 477312161110620 25477 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// Boost string_algo library predicate.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_PREDICATE_DETAIL_HPP #define BOOST_STRING_PREDICATE_DETAIL_HPP #include #include namespace boost { namespace algorithm { namespace detail { // ends_with predicate implementation ----------------------------------// template< typename ForwardIterator1T, typename ForwardIterator2T, typename PredicateT> inline bool ends_with_iter_select( ForwardIterator1T Begin, ForwardIterator1T End, ForwardIterator2T SubBegin, ForwardIterator2T SubEnd, PredicateT Comp, std::bidirectional_iterator_tag) { ForwardIterator1T it=End; ForwardIterator2T pit=SubEnd; for(;it!=Begin && pit!=SubBegin;) { if( !(Comp(*(--it),*(--pit))) ) return false; } return pit==SubBegin; } template< typename ForwardIterator1T, typename ForwardIterator2T, typename PredicateT> inline bool ends_with_iter_select( ForwardIterator1T Begin, ForwardIterator1T End, ForwardIterator2T SubBegin, ForwardIterator2T SubEnd, PredicateT Comp, std::forward_iterator_tag) { if ( SubBegin==SubEnd ) { // empty subsequence check return true; } iterator_range Result =last_finder( ::boost::make_iterator_range(SubBegin, SubEnd), Comp)(Begin, End); return !Result.empty() && Result.end()==End; } } // namespace detail } // namespace algorithm } // namespace boost #endif // BOOST_STRING_PREDICATE_DETAIL_HPP replace_storage.hpp000444000765000024 1372712161110646 26725 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// 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 sequence.hpp000444000765000024 1706112161110614 25364 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// 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 trim.hpp000444000765000024 633012161110617 24507 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// Boost string_algo library trim.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_TRIM_DETAIL_HPP #define BOOST_STRING_TRIM_DETAIL_HPP #include #include namespace boost { namespace algorithm { namespace detail { // trim iterator helper -----------------------------------------------// template< typename ForwardIteratorT, typename PredicateT > inline ForwardIteratorT trim_end_iter_select( ForwardIteratorT InBegin, ForwardIteratorT InEnd, PredicateT IsSpace, std::forward_iterator_tag ) { ForwardIteratorT TrimIt=InBegin; for( ForwardIteratorT It=InBegin; It!=InEnd; ++It ) { if ( !IsSpace(*It) ) { TrimIt=It; ++TrimIt; } } return TrimIt; } template< typename ForwardIteratorT, typename PredicateT > inline ForwardIteratorT trim_end_iter_select( ForwardIteratorT InBegin, ForwardIteratorT InEnd, PredicateT IsSpace, std::bidirectional_iterator_tag ) { for( ForwardIteratorT It=InEnd; It!=InBegin; ) { if ( !IsSpace(*(--It)) ) return ++It; } return InBegin; } // Search for first non matching character from the beginning of the sequence template< typename ForwardIteratorT, typename PredicateT > inline ForwardIteratorT trim_begin( ForwardIteratorT InBegin, ForwardIteratorT InEnd, PredicateT IsSpace ) { ForwardIteratorT It=InBegin; for(; It!=InEnd; ++It ) { if (!IsSpace(*It)) return It; } return It; } // Search for first non matching character from the end of the sequence template< typename ForwardIteratorT, typename PredicateT > inline ForwardIteratorT trim_end( ForwardIteratorT InBegin, ForwardIteratorT InEnd, PredicateT IsSpace ) { typedef BOOST_STRING_TYPENAME boost::detail:: iterator_traits::iterator_category category; return ::boost::algorithm::detail::trim_end_iter_select( InBegin, InEnd, IsSpace, category() ); } } // namespace detail } // namespace algorithm } // namespace boost #endif // BOOST_STRING_TRIM_DETAIL_HPP util.hpp000444000765000024 675212161110607 24520 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/detail// 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 std000755000765000024 012161110625 22213 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/stringlist_traits.hpp000444000765000024 533212161110625 25425 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/std// Boost string_algo library list_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_STD_LIST_TRAITS_HPP #define BOOST_STRING_STD_LIST_TRAITS_HPP #include #include #include namespace boost { namespace algorithm { // std::list<> traits -----------------------------------------------// #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // stable iterators tester template yes_type has_stable_iterators_tester( const ::std::list* ); // const time insert tester template yes_type has_const_time_insert_tester( const ::std::list* ); // const time erase tester template yes_type has_const_time_erase_tester( const ::std::list* ); #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // stable iterators trait template class has_stable_iterators< ::std::list > { public: #if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) enum { value = true }; #else BOOST_STATIC_CONSTANT(bool, value=true); #endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) typedef mpl::bool_::value> type; }; // const time insert trait template class has_const_time_insert< ::std::list > { public: #if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) enum { value = true }; #else BOOST_STATIC_CONSTANT(bool, value=true); #endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) typedef mpl::bool_::value> type; }; // const time erase trait template class has_const_time_erase< ::std::list > { public: #if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) enum { value = true }; #else BOOST_STATIC_CONSTANT(bool, value=true); #endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) typedef mpl::bool_::value> type; }; #endif } // namespace algorithm } // namespace boost #endif // BOOST_STRING_STD_LIST_TRAITS_HPP slist_traits.hpp000444000765000024 565012161110615 25612 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/std// Boost string_algo library slist_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_STD_SLIST_TRAITS_HPP #define BOOST_STRING_STD_SLIST_TRAITS_HPP #include #include #include BOOST_SLIST_HEADER #include namespace boost { namespace algorithm { // SGI's std::slist<> traits -----------------------------------------------// #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // stable iterators tester template yes_type has_stable_iterators_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist* ); // const time insert tester template yes_type has_const_time_insert_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist* ); // const time erase tester template yes_type has_const_time_erase_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist* ); #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // stable iterators trait template class has_stable_iterators< BOOST_STD_EXTENSION_NAMESPACE::slist > { public: #if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) enum { value = true }; #else BOOST_STATIC_CONSTANT(bool, value=true); #endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) typedef mpl::bool_::value> type; }; // const time insert trait template class has_const_time_insert< BOOST_STD_EXTENSION_NAMESPACE::slist > { public: #if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) enum { value = true }; #else BOOST_STATIC_CONSTANT(bool, value=true); #endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) typedef mpl::bool_::value> type; }; // const time erase trait template class has_const_time_erase< BOOST_STD_EXTENSION_NAMESPACE::slist > { public: #if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) enum { value = true }; #else BOOST_STATIC_CONSTANT(bool, value=true); #endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) typedef mpl::bool_::value> type; }; #endif } // namespace algorithm } // namespace boost #endif // BOOST_STRING_STD_LIST_TRAITS_HPP string_traits.hpp000444000765000024 317612161110617 25765 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/algorithm/string/std// Boost string_algo library string_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_STD_STRING_TRAITS_HPP #define BOOST_STRING_STD_STRING_TRAITS_HPP #include #include #include namespace boost { namespace algorithm { // std::basic_string<> traits -----------------------------------------------// #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // native replace tester template yes_type has_native_replace_tester( const std::basic_string* ); #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // native replace trait template class has_native_replace< std::basic_string > { public: #if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) enum { value = true } ; #else BOOST_STATIC_CONSTANT(bool, value=true); #endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) typedef mpl::bool_::value> type; }; #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION } // namespace algorithm } // namespace boost #endif // BOOST_STRING_LIST_TRAITS_HPP archive000755000765000024 012161110700 17540 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostadd_facet.hpp000444000765000024 342212161110666 22314 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_ADD_FACET_HPP #define BOOST_ARCHIVE_ADD_FACET_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // add_facet.hpp // (C) Copyright 2003 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include // does STLport uses native STL for locales? #if (defined(__SGI_STL_PORT)&& defined(_STLP_NO_OWN_IOSTREAMS)) // and this native STL lib is old Dinkumware (has not defined _CPPLIB_VER) # if (defined(_YVALS) && !defined(__IBMCPP__)) || !defined(_CPPLIB_VER) # define BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT # endif #endif namespace boost { namespace archive { template inline std::locale * add_facet(const std::locale &l, Facet * f){ return #if defined BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT // std namespace used for native locale new std::locale(std::_Addfac(l, f)); #elif BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // old Dinkumwar // std namespace used for native locale new std::locale(std::_Addfac(l, f)); #else // standard compatible new std::locale(l, f); #endif } } // namespace archive } // namespace boost #undef BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT #endif // BOOST_ARCHIVE_ADD_FACET_HPP archive_exception.hpp000444000765000024 775012161110602 24117 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP #define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // archive/archive_exception.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include #include // note: the only reason this is in here is that windows header // includes #define exception_code _exception_code (arrrgghhhh!). // the most expedient way to address this is be sure that this // header is always included whenever this header file is included. #if defined(BOOST_WINDOWS) #include #endif #include // must be the last header namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // exceptions thrown by archives // class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) archive_exception : public virtual std::exception { protected: char m_buffer[128]; public: typedef enum { no_exception, // initialized without code other_exception, // any excepton not listed below unregistered_class, // attempt to serialize a pointer of an // an unregistered class invalid_signature, // first line of archive does not contain // expected string unsupported_version,// archive created with library version // subsequent to this one pointer_conflict, // an attempt has been made to directly // serialize an object which has // already been serialzed through a pointer. // Were this permited, the archive load would result // in the creation of an extra copy of the obect. incompatible_native_format, // attempt to read native binary format // on incompatible platform array_size_too_short,// array being loaded doesn't fit in array allocated input_stream_error, // error on input stream invalid_class_name, // class name greater than the maximum permitted. // most likely a corrupted archive or an attempt // to insert virus via buffer overrun method. unregistered_cast, // base - derived relationship not registered with // void_cast_register unsupported_class_version, // type saved with a version # greater than the // one used by the program. This indicates that the proggram // needs to be rebuilt. multiple_code_instantiation, // code for implementing serialization for some // type has been instantiated in more than one module. output_stream_error // error on input stream } exception_code; public: exception_code code; archive_exception( exception_code c, const char * e1 = NULL, const char * e2 = NULL ); virtual ~archive_exception() throw(); virtual const char *what() const throw(); protected: unsigned int append(unsigned int l, const char * a); archive_exception(); }; }// namespace archive }// namespace boost #include // pops abi_suffix.hpp pragmas #endif //BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP basic_archive.hpp000444000765000024 2240412161110644 23221 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_ARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_ARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_archive.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include // size_t #include #include #include #include // must be the last header namespace boost { namespace archive { #if defined(_MSC_VER) #pragma warning( push ) #pragma warning( disable : 4244 4267 ) #endif /* NOTE : Warning : Warning : Warning : Warning : Warning * Don't ever changes this. If you do, they previously created * binary archives won't be readable !!! */ class library_version_type { private: typedef uint_least16_t base_type; base_type t; public: library_version_type(): t(0) {}; explicit library_version_type(const unsigned int & t_) : t(t_){ BOOST_ASSERT(t_ <= boost::integer_traits::const_max); } library_version_type(const library_version_type & t_) : t(t_.t) {} library_version_type & operator=(const library_version_type & rhs){ t = rhs.t; return *this; } // used for text output operator base_type () const { return t; } // used for text input operator base_type & (){ return t; } bool operator==(const library_version_type & rhs) const { return t == rhs.t; } bool operator<(const library_version_type & rhs) const { return t < rhs.t; } }; BOOST_ARCHIVE_DECL(library_version_type) BOOST_ARCHIVE_VERSION(); class version_type { private: typedef uint_least32_t base_type; base_type t; public: // should be private - but MPI fails if it's not!!! version_type(): t(0) {}; explicit version_type(const unsigned int & t_) : t(t_){ BOOST_ASSERT(t_ <= boost::integer_traits::const_max); } version_type(const version_type & t_) : t(t_.t) {} version_type & operator=(const version_type & rhs){ t = rhs.t; return *this; } // used for text output operator base_type () const { return t; } // used for text intput operator base_type & (){ return t; } bool operator==(const version_type & rhs) const { return t == rhs.t; } bool operator<(const version_type & rhs) const { return t < rhs.t; } }; class class_id_type { private: typedef int_least16_t base_type; base_type t; public: // should be private - but then can't use BOOST_STRONG_TYPE below class_id_type() : t(0) {}; explicit class_id_type(const int t_) : t(t_){ BOOST_ASSERT(t_ <= boost::integer_traits::const_max); } explicit class_id_type(const std::size_t t_) : t(t_){ // BOOST_ASSERT(t_ <= boost::integer_traits::const_max); } class_id_type(const class_id_type & t_) : t(t_.t) {} class_id_type & operator=(const class_id_type & rhs){ t = rhs.t; return *this; } // used for text output operator int () const { return t; } // used for text input operator int_least16_t &() { return t; } bool operator==(const class_id_type & rhs) const { return t == rhs.t; } bool operator<(const class_id_type & rhs) const { return t < rhs.t; } }; #define NULL_POINTER_TAG boost::archive::class_id_type(-1) class object_id_type { private: typedef uint_least32_t base_type; base_type t; public: object_id_type(): t(0) {}; // note: presumes that size_t >= unsigned int. explicit object_id_type(const std::size_t & t_) : t(t_){ BOOST_ASSERT(t_ <= boost::integer_traits::const_max); } object_id_type(const object_id_type & t_) : t(t_.t) {} object_id_type & operator=(const object_id_type & rhs){ t = rhs.t; return *this; } // used for text output operator uint_least32_t () const { return t; } // used for text input operator uint_least32_t & () { return t; } bool operator==(const object_id_type & rhs) const { return t == rhs.t; } bool operator<(const object_id_type & rhs) const { return t < rhs.t; } }; #if defined(_MSC_VER) #pragma warning( pop ) #endif struct tracking_type { bool t; explicit tracking_type(const bool t_ = false) : t(t_) {}; tracking_type(const tracking_type & t_) : t(t_.t) {} operator bool () const { return t; }; operator bool & () { return t; }; tracking_type & operator=(const bool t_){ t = t_; return *this; } bool operator==(const tracking_type & rhs) const { return t == rhs.t; } bool operator==(const bool & rhs) const { return t == rhs; } tracking_type & operator=(const tracking_type & rhs){ t = rhs.t; return *this; } }; struct class_name_type : private boost::noncopyable { char *t; operator const char * & () const { return const_cast(t); } operator char * () { return t; } explicit class_name_type(const char *key_) : t(const_cast(key_)){} explicit class_name_type(char *key_) : t(key_){} class_name_type & operator=(const class_name_type & rhs){ t = rhs.t; return *this; } }; enum archive_flags { no_header = 1, // suppress archive header info no_codecvt = 2, // suppress alteration of codecvt facet no_xml_tag_checking = 4, // suppress checking of xml tags no_tracking = 8, // suppress ALL tracking flags_last = 8 }; BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_SIGNATURE(); /* NOTE : Warning : Warning : Warning : Warning : Warning * If any of these are changed to different sized types, * binary_iarchive won't be able to read older archives * unless you rev the library version and include conditional * code based on the library version. There is nothing * inherently wrong in doing this - but you have to be super * careful because it's easy to get wrong and start breaking * old archives !!! */ #define BOOST_ARCHIVE_STRONG_TYPEDEF(T, D) \ class D : public T { \ public: \ explicit D(const T tt) : T(tt){} \ }; \ /**/ BOOST_ARCHIVE_STRONG_TYPEDEF(class_id_type, class_id_reference_type) BOOST_ARCHIVE_STRONG_TYPEDEF(class_id_type, class_id_optional_type) BOOST_ARCHIVE_STRONG_TYPEDEF(object_id_type, object_reference_type) }// namespace archive }// namespace boost #include // pops abi_suffix.hpp pragmas #include // set implementation level to primitive for all types // used internally by the serialization library BOOST_CLASS_IMPLEMENTATION(boost::archive::library_version_type, primitive_type) BOOST_CLASS_IMPLEMENTATION(boost::archive::version_type, primitive_type) BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_type, primitive_type) BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_reference_type, primitive_type) BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_optional_type, primitive_type) BOOST_CLASS_IMPLEMENTATION(boost::archive::class_name_type, primitive_type) BOOST_CLASS_IMPLEMENTATION(boost::archive::object_id_type, primitive_type) BOOST_CLASS_IMPLEMENTATION(boost::archive::object_reference_type, primitive_type) BOOST_CLASS_IMPLEMENTATION(boost::archive::tracking_type, primitive_type) #include // set types used internally by the serialization library // to be bitwise serializable BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::library_version_type) BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::version_type) BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::class_id_type) BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::class_id_reference_type) BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::class_id_optional_type) BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::class_name_type) BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::object_id_type) BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::object_reference_type) BOOST_IS_BITWISE_SERIALIZABLE(boost::archive::tracking_type) #endif //BOOST_ARCHIVE_BASIC_ARCHIVE_HPP basic_binary_iarchive.hpp000444000765000024 1730212161110700 24730 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_iarchive.hpp // // archives stored as native binary - this should be the fastest way // to archive the state of a group of obects. It makes no attempt to // convert to any canonical form. // IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE // ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif #include // must be the last header namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////// // class basic_binary_iarchive - read serialized objects from a input binary stream template class basic_binary_iarchive : public detail::common_iarchive { protected: #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) public: #elif defined(BOOST_MSVC) // for some inexplicable reason insertion of "class" generates compile erro // on msvc 7.1 friend detail::interface_iarchive; #else friend class detail::interface_iarchive; #endif // intermediate level to support override of operators // fot templates in the absence of partial function // template ordering. If we get here pass to base class // note extra nonsense to sneak it pass the borland compiers typedef detail::common_iarchive detail_common_iarchive; template void load_override(T & t, BOOST_PFTO int version){ this->detail_common_iarchive::load_override(t, static_cast(version)); } // include these to trap a change in binary format which // isn't specifically handled // upto 32K classes BOOST_STATIC_ASSERT(sizeof(class_id_type) == sizeof(int_least16_t)); BOOST_STATIC_ASSERT(sizeof(class_id_reference_type) == sizeof(int_least16_t)); // upto 2G objects BOOST_STATIC_ASSERT(sizeof(object_id_type) == sizeof(uint_least32_t)); BOOST_STATIC_ASSERT(sizeof(object_reference_type) == sizeof(uint_least32_t)); // binary files don't include the optional information void load_override(class_id_optional_type & /* t */, int){} void load_override(tracking_type & t, int /*version*/){ library_version_type lvt = this->get_library_version(); if(boost::archive::library_version_type(6) < lvt){ int_least8_t x=0; * this->This() >> x; t = boost::archive::tracking_type(x); } else{ bool x=0; * this->This() >> x; t = boost::archive::tracking_type(x); } } void load_override(class_id_type & t, int version){ library_version_type lvt = this->get_library_version(); if(boost::archive::library_version_type(7) < lvt){ this->detail_common_iarchive::load_override(t, version); } else if(boost::archive::library_version_type(6) < lvt){ int_least16_t x=0; * this->This() >> x; t = boost::archive::class_id_type(x); } else{ int x=0; * this->This() >> x; t = boost::archive::class_id_type(x); } } void load_override(class_id_reference_type & t, int version){ load_override(static_cast(t), version); } #if 0 void load_override(class_id_reference_type & t, int version){ library_version_type lvt = this->get_library_version(); if(boost::archive::library_version_type(7) < lvt){ this->detail_common_iarchive::load_override(t, version); } else if(boost::archive::library_version_type(6) < lvt){ int_least16_t x=0; * this->This() >> x; t = boost::archive::class_id_reference_type( boost::archive::class_id_type(x) ); } else{ int x=0; * this->This() >> x; t = boost::archive::class_id_reference_type( boost::archive::class_id_type(x) ); } } #endif void load_override(version_type & t, int version){ library_version_type lvt = this->get_library_version(); if(boost::archive::library_version_type(7) < lvt){ this->detail_common_iarchive::load_override(t, version); } else if(boost::archive::library_version_type(6) < lvt){ uint_least8_t x=0; * this->This() >> x; t = boost::archive::version_type(x); } else if(boost::archive::library_version_type(5) < lvt){ uint_least16_t x=0; * this->This() >> x; t = boost::archive::version_type(x); } else if(boost::archive::library_version_type(2) < lvt){ // upto 255 versions unsigned char x=0; * this->This() >> x; t = version_type(x); } else{ unsigned int x=0; * this->This() >> x; t = boost::archive::version_type(x); } } void load_override(boost::serialization::item_version_type & t, int version){ library_version_type lvt = this->get_library_version(); // if(boost::archive::library_version_type(7) < lvt){ if(boost::archive::library_version_type(6) < lvt){ this->detail_common_iarchive::load_override(t, version); } else if(boost::archive::library_version_type(6) < lvt){ uint_least16_t x=0; * this->This() >> x; t = boost::serialization::item_version_type(x); } else{ unsigned int x=0; * this->This() >> x; t = boost::serialization::item_version_type(x); } } void load_override(serialization::collection_size_type & t, int version){ if(boost::archive::library_version_type(5) < this->get_library_version()){ this->detail_common_iarchive::load_override(t, version); } else{ unsigned int x=0; * this->This() >> x; t = serialization::collection_size_type(x); } } BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_override(class_name_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) init(); basic_binary_iarchive(unsigned int flags) : detail::common_iarchive(flags) {} }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP basic_binary_iprimitive.hpp000444000765000024 1425212161110621 25322 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP #define BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #if defined(_MSC_VER) #pragma warning( disable : 4800 ) #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_iprimitive.hpp // // archives stored as native binary - this should be the fastest way // to archive the state of a group of obects. It makes no attempt to // convert to any canonical form. // IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE // ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include // std::memcpy #include // std::size_t #include // basic_streambuf #include #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; using ::size_t; } // namespace std #endif #include #include #include #include #include #include #include #include #include #include #include #include // must be the last header namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////////// // class binary_iarchive - read serialized objects from a input binary stream template class basic_binary_iprimitive { #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS friend class load_access; protected: #else public: #endif std::basic_streambuf & m_sb; // return a pointer to the most derived class Archive * This(){ return static_cast(this); } #ifndef BOOST_NO_STD_LOCALE boost::scoped_ptr archive_locale; basic_streambuf_locale_saver locale_saver; #endif // main template for serilization of primitive types template void load(T & t){ load_binary(& t, sizeof(T)); } ///////////////////////////////////////////////////////// // fundamental types that need special treatment // trap usage of invalid uninitialized boolean void load(bool & t){ load_binary(& t, sizeof(t)); int i = t; BOOST_ASSERT(0 == i || 1 == i); (void)i; // warning suppression for release builds. } BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load(std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load(std::wstring &ws); #endif BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load(char * t); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load(wchar_t * t); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) init(); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_binary_iprimitive( std::basic_streambuf & sb, bool no_codecvt ); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~basic_binary_iprimitive(); public: // we provide an optimized load for all fundamental types // typedef serialization::is_bitwise_serializable // use_array_optimization; struct use_array_optimization { template #if defined(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS) struct apply { typedef BOOST_DEDUCED_TYPENAME boost::serialization::is_bitwise_serializable< T >::type type; }; #else struct apply : public boost::serialization::is_bitwise_serializable< T > {}; #endif }; // the optimized load_array dispatches to load_binary template void load_array(serialization::array& a, unsigned int) { load_binary(a.address(),a.count()*sizeof(ValueType)); } void load_binary(void *address, std::size_t count); }; template inline void basic_binary_iprimitive::load_binary( void *address, std::size_t count ){ // note: an optimizer should eliminate the following for char files BOOST_ASSERT( static_cast(count / sizeof(Elem)) <= boost::integer_traits::const_max ); std::streamsize s = static_cast(count / sizeof(Elem)); std::streamsize scount = m_sb.sgetn( static_cast(address), s ); if(scount != s) boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); // note: an optimizer should eliminate the following for char files BOOST_ASSERT(count % sizeof(Elem) <= boost::integer_traits::const_max); s = static_cast(count % sizeof(Elem)); if(0 < s){ // if(is.fail()) // boost::serialization::throw_exception( // archive_exception(archive_exception::stream_error) // ); Elem t; scount = m_sb.sgetn(& t, 1); if(scount != 1) boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); std::memcpy(static_cast(address) + (count - s), &t, s); } } } // namespace archive } // namespace boost #include // pop pragmas #endif // BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP basic_binary_oarchive.hpp000444000765000024 1452012161110617 24744 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // archives stored as native binary - this should be the fastest way // to archive the state of a group of obects. It makes no attempt to // convert to any canonical form. // IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE // ON PLATFORM APART FROM THE ONE THEY ARE CREATE ON #include #include #include #include #include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // class basic_binary_oarchive - write serialized objects to a binary output stream // note: this archive has no pretensions to portability. Archive format // may vary across machine architectures and compilers. About the only // guarentee is that an archive created with this code will be readable // by a program built with the same tools for the same machne. This class // does have the virtue of buiding the smalles archive in the minimum amount // of time. So under some circumstances it may be he right choice. template class basic_binary_oarchive : public archive::detail::common_oarchive { protected: #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) public: #elif defined(BOOST_MSVC) // for some inexplicable reason insertion of "class" generates compile erro // on msvc 7.1 friend detail::interface_oarchive; #else friend class detail::interface_oarchive; #endif // any datatype not specifed below will be handled by base class typedef detail::common_oarchive detail_common_oarchive; template void save_override(const T & t, BOOST_PFTO int version){ this->detail_common_oarchive::save_override(t, static_cast(version)); } // include these to trap a change in binary format which // isn't specifically handled BOOST_STATIC_ASSERT(sizeof(tracking_type) == sizeof(bool)); // upto 32K classes BOOST_STATIC_ASSERT(sizeof(class_id_type) == sizeof(int_least16_t)); BOOST_STATIC_ASSERT(sizeof(class_id_reference_type) == sizeof(int_least16_t)); // upto 2G objects BOOST_STATIC_ASSERT(sizeof(object_id_type) == sizeof(uint_least32_t)); BOOST_STATIC_ASSERT(sizeof(object_reference_type) == sizeof(uint_least32_t)); // binary files don't include the optional information void save_override(const class_id_optional_type & /* t */, int){} // enable this if we decide to support generation of previous versions #if 0 void save_override(const boost::archive::version_type & t, int version){ library_version_type lvt = this->get_library_version(); if(boost::archive::library_version_type(7) < lvt){ this->detail_common_oarchive::save_override(t, version); } else if(boost::archive::library_version_type(6) < lvt){ const boost::uint_least16_t x = t; * this->This() << x; } else{ const unsigned int x = t; * this->This() << x; } } void save_override(const boost::serialization::item_version_type & t, int version){ library_version_type lvt = this->get_library_version(); if(boost::archive::library_version_type(7) < lvt){ this->detail_common_oarchive::save_override(t, version); } else if(boost::archive::library_version_type(6) < lvt){ const boost::uint_least16_t x = t; * this->This() << x; } else{ const unsigned int x = t; * this->This() << x; } } void save_override(class_id_type & t, int version){ library_version_type lvt = this->get_library_version(); if(boost::archive::library_version_type(7) < lvt){ this->detail_common_oarchive::save_override(t, version); } else if(boost::archive::library_version_type(6) < lvt){ const boost::int_least16_t x = t; * this->This() << x; } else{ const int x = t; * this->This() << x; } } void save_override(class_id_reference_type & t, int version){ save_override(static_cast(t), version); } #endif // explicitly convert to char * to avoid compile ambiguities void save_override(const class_name_type & t, int){ const std::string s(t); * this->This() << s; } #if 0 void save_override(const serialization::collection_size_type & t, int){ if (get_library_version() < boost::archive::library_version_type(6)){ unsigned int x=0; * this->This() >> x; t = serialization::collection_size_type(x); } else{ * this->This() >> t; } } #endif BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) init(); basic_binary_oarchive(unsigned int flags) : detail::common_oarchive(flags) {} }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP basic_binary_oprimitive.hpp000444000765000024 1413312161110617 25333 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP #define BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_oprimitive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // archives stored as native binary - this should be the fastest way // to archive the state of a group of obects. It makes no attempt to // convert to any canonical form. // IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE // ON PLATFORM APART FROM THE ONE THEY ARE CREATE ON #include #include #include #include // basic_streambuf #include #include // size_t #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include #include #include #include #include #include #include // must be the last header namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////// // class basic_binary_oprimitive - binary output of prmitives template class basic_binary_oprimitive { #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS friend class save_access; protected: #else public: #endif std::basic_streambuf & m_sb; // return a pointer to the most derived class Archive * This(){ return static_cast(this); } #ifndef BOOST_NO_STD_LOCALE boost::scoped_ptr archive_locale; basic_streambuf_locale_saver locale_saver; #endif // default saving of primitives. template void save(const T & t) { save_binary(& t, sizeof(T)); } ///////////////////////////////////////////////////////// // fundamental types that need special treatment // trap usage of invalid uninitialized boolean which would // otherwise crash on load. void save(const bool t){ BOOST_ASSERT(0 == static_cast(t) || 1 == static_cast(t)); save_binary(& t, sizeof(t)); } BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save(const std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save(const std::wstring &ws); #endif BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save(const char * t); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save(const wchar_t * t); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) init(); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_binary_oprimitive( std::basic_streambuf & sb, bool no_codecvt ); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~basic_binary_oprimitive(); public: // we provide an optimized save for all fundamental types // typedef serialization::is_bitwise_serializable // use_array_optimization; // workaround without using mpl lambdas struct use_array_optimization { template #if defined(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS) struct apply { typedef BOOST_DEDUCED_TYPENAME boost::serialization::is_bitwise_serializable< T >::type type; }; #else struct apply : public boost::serialization::is_bitwise_serializable< T > {}; #endif }; // the optimized save_array dispatches to save_binary template void save_array(boost::serialization::array const& a, unsigned int) { save_binary(a.address(),a.count()*sizeof(ValueType)); } void save_binary(const void *address, std::size_t count); }; template inline void basic_binary_oprimitive::save_binary( const void *address, std::size_t count ){ //BOOST_ASSERT( // static_cast((std::numeric_limits::max)()) >= count //); // note: if the following assertions fail // a likely cause is that the output stream is set to "text" // mode where by cr characters recieve special treatment. // be sure that the output stream is opened with ios::binary //if(os.fail()) // boost::serialization::throw_exception( // archive_exception(archive_exception::output_stream_error) // ); // figure number of elements to output - round up count = ( count + sizeof(Elem) - 1) / sizeof(Elem); BOOST_ASSERT(count <= std::size_t(boost::integer_traits::const_max)); std::streamsize scount = m_sb.sputn( static_cast(address), static_cast(count) ); if(count != static_cast(scount)) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); //os.write( // static_cast(address), // count //); //BOOST_ASSERT(os.good()); } } //namespace boost } //namespace archive #include // pop pragmas #endif // BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP basic_streambuf_locale_saver.hpp000444000765000024 424612161110600 26263 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP #define BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_streambuf_local_saver.hpp // (C) Copyright 2005 Robert Ramey - http://www.rrsd.com // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // note derived from boost/io/ios_state.hpp // Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution // are subject to the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or a copy at .) // See for the library's home page. #ifndef BOOST_NO_STD_LOCALE #include // for std::locale #include // for std::basic_streambuf #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost{ namespace archive{ template < typename Ch, class Tr > class basic_streambuf_locale_saver : private boost::noncopyable { public: typedef ::std::basic_streambuf state_type; typedef ::std::locale aspect_type; explicit basic_streambuf_locale_saver( state_type &s ) : s_save_( s ), a_save_( s.getloc() ) {} basic_streambuf_locale_saver( state_type &s, aspect_type const &a ) : s_save_( s ), a_save_( s.pubimbue(a) ) {} ~basic_streambuf_locale_saver() { this->restore(); } void restore() { s_save_.pubimbue( a_save_ ); } private: state_type & s_save_; aspect_type const a_save_; }; } // archive } // boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_NO_STD_LOCALE #endif // BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP basic_text_iarchive.hpp000444000765000024 570612161110635 24424 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_iarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // archives stored as text - note these ar templated on the basic // stream templates to accommodate wide (and other?) kind of characters // // note the fact that on libraries without wide characters, ostream is // is not a specialization of basic_ostream which in fact is not defined // in such cases. So we can't use basic_ostream but rather // use two template parameters #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////// // class basic_text_iarchive - read serialized objects from a input text stream template class basic_text_iarchive : public detail::common_iarchive { protected: #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) public: #elif defined(BOOST_MSVC) // for some inexplicable reason insertion of "class" generates compile erro // on msvc 7.1 friend detail::interface_iarchive; #else friend class detail::interface_iarchive; #endif // intermediate level to support override of operators // fot templates in the absence of partial function // template ordering typedef detail::common_iarchive detail_common_iarchive; template void load_override(T & t, BOOST_PFTO int){ this->detail_common_iarchive::load_override(t, 0); } // text file don't include the optional information void load_override(class_id_optional_type & /*t*/, int){} BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_override(class_name_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) init(void); basic_text_iarchive(unsigned int flags) : detail::common_iarchive(flags) {} ~basic_text_iarchive(){} }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP basic_text_iprimitive.hpp000444000765000024 767412161110600 25011 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP #define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_iprimitive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // archives stored as text - note these are 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 // 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 #include #include #include // size_t #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT) using ::locale; #endif } // namespace std #endif #include #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) #include #endif #include #include #include #include #include #include #include #include // must be the last header namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////// // class basic_text_iarchive - load serialized objects from a input text stream #if defined(_MSC_VER) #pragma warning( push ) #pragma warning( disable : 4244 4267 ) #endif template class basic_text_iprimitive { #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS protected: #else public: #endif IStream &is; io::ios_flags_saver flags_saver; io::ios_precision_saver precision_saver; #ifndef BOOST_NO_STD_LOCALE boost::scoped_ptr archive_locale; basic_streambuf_locale_saver< BOOST_DEDUCED_TYPENAME IStream::char_type, BOOST_DEDUCED_TYPENAME IStream::traits_type > locale_saver; #endif template void load(T & t) { if(! is.fail()){ is >> t; return; } boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); } void load(char & t) { short int i; load(i); t = i; } void load(signed char & t) { short int i; load(i); t = i; } void load(unsigned char & t) { unsigned short int i; load(i); t = i; } #ifndef BOOST_NO_INTRINSIC_WCHAR_T void load(wchar_t & t) { BOOST_STATIC_ASSERT(sizeof(wchar_t) <= sizeof(int)); int i; load(i); t = i; } #endif BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_text_iprimitive(IStream &is, bool no_codecvt); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~basic_text_iprimitive(); public: BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_binary(void *address, std::size_t count); }; #if defined(_MSC_VER) #pragma warning( pop ) #endif } // namespace archive } // namespace boost #include // pop pragmas #endif // BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP basic_text_oarchive.hpp000444000765000024 671512161110622 24427 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // archives stored as text - note these ar templated on the basic // stream templates to accommodate wide (and other?) kind of characters // // note the fact that on libraries without wide characters, ostream is // is not a specialization of basic_ostream which in fact is not defined // in such cases. So we can't use basic_ostream but rather // use two template parameters #include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////// // class basic_text_oarchive template class basic_text_oarchive : public detail::common_oarchive { protected: #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ || BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560)) public: #elif defined(BOOST_MSVC) // for some inexplicable reason insertion of "class" generates compile erro // on msvc 7.1 friend detail::interface_oarchive; #else friend class detail::interface_oarchive; #endif enum { none, eol, space } delimiter; BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) newtoken(); void newline(){ delimiter = eol; } // default processing - kick back to base class. Note the // extra stuff to get it passed borland compilers typedef detail::common_oarchive detail_common_oarchive; template void save_override(T & t, BOOST_PFTO int){ this->detail_common_oarchive::save_override(t, 0); } // start new objects on a new line void save_override(const object_id_type & t, int){ this->This()->newline(); this->detail_common_oarchive::save_override(t, 0); } // text file don't include the optional information void save_override(const class_id_optional_type & /* t */, int){} void save_override(const class_name_type & t, int){ const std::string s(t); * this->This() << s; } BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) init(); basic_text_oarchive(unsigned int flags) : detail::common_oarchive(flags), delimiter(none) {} ~basic_text_oarchive(){} }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP basic_text_oprimitive.hpp000444000765000024 1306712161110700 25031 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP #define BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_oprimitive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // archives stored as text - note these ar templated on the basic // stream templates to accommodate wide (and other?) kind of characters // // note the fact that on libraries without wide characters, ostream is // is not a specialization of basic_ostream which in fact is not defined // in such cases. So we can't use basic_ostream but rather // use two template parameters #include #include #include // isnan #include #include // size_t #include #include #include #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) #include #endif #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT) using ::locale; #endif } // namespace std #endif #include #include #include #include #include #include #include #include // must be the last header namespace boost { namespace archive { class save_access; ///////////////////////////////////////////////////////////////////////// // class basic_text_oprimitive - output of prmitives to stream template class basic_text_oprimitive { #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS protected: #else public: #endif OStream &os; io::ios_flags_saver flags_saver; io::ios_precision_saver precision_saver; #ifndef BOOST_NO_STD_LOCALE boost::scoped_ptr archive_locale; basic_streambuf_locale_saver< BOOST_DEDUCED_TYPENAME OStream::char_type, BOOST_DEDUCED_TYPENAME OStream::traits_type > locale_saver; #endif // default saving of primitives. template void save(const T &t){ if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); os << t; } ///////////////////////////////////////////////////////// // fundamental types that need special treatment void save(const bool t){ // trap usage of invalid uninitialized boolean which would // otherwise crash on load. BOOST_ASSERT(0 == static_cast(t) || 1 == static_cast(t)); if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); os << t; } void save(const signed char t) { save(static_cast(t)); } void save(const unsigned char t) { save(static_cast(t)); } void save(const char t) { save(static_cast(t)); } #ifndef BOOST_NO_INTRINSIC_WCHAR_T void save(const wchar_t t) { BOOST_STATIC_ASSERT(sizeof(wchar_t) <= sizeof(int)); save(static_cast(t)); } #endif void save(const float t) { // must be a user mistake - can't serialize un-initialized data if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); os << std::setprecision(std::numeric_limits::digits10 + 2); os << t; } void save(const double t) { // must be a user mistake - can't serialize un-initialized data if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); os << std::setprecision(std::numeric_limits::digits10 + 2); os << t; } BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_text_oprimitive(OStream & os, bool no_codecvt); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~basic_text_oprimitive(); public: // unformatted append of one character void put(BOOST_DEDUCED_TYPENAME OStream::char_type c){ if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); os.put(c); } // unformatted append of null terminated string void put(const char * s){ while('\0' != *s) os.put(*s++); } BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_binary(const void *address, std::size_t count); }; } //namespace boost } //namespace archive #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP basic_xml_archive.hpp000444000765000024 331512161110646 24063 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_archive.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include // must be the last header namespace boost { namespace archive { // constant strings used in xml i/o extern BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_XML_OBJECT_ID(); extern BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_XML_OBJECT_REFERENCE(); extern BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_XML_CLASS_ID(); extern BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_XML_CLASS_ID_REFERENCE(); extern BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_XML_CLASS_NAME(); extern BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_XML_TRACKING(); extern BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_XML_VERSION(); extern BOOST_ARCHIVE_DECL(const char *) BOOST_ARCHIVE_XML_SIGNATURE(); }// namespace archive }// namespace boost #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP basic_xml_iarchive.hpp000444000765000024 1056412161110662 24256 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_iarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////// // class xml_iarchive - read serialized objects from a input text stream template class basic_xml_iarchive : public detail::common_iarchive { protected: #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) public: #elif defined(BOOST_MSVC) // for some inexplicable reason insertion of "class" generates compile erro // on msvc 7.1 friend detail::interface_oarchive; #else friend class detail::interface_oarchive; #endif unsigned int depth; BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_start(const char *name); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_end(const char *name); // Anything not an attribute and not a name-value pair is an // should be trapped here. template void load_override(T & t, BOOST_PFTO int) { // If your program fails to compile here, its most likely due to // not specifying an nvp wrapper around the variable to // be serialized. BOOST_MPL_ASSERT((serialization::is_wrapper< T >)); this->detail_common_iarchive::load_override(t, 0); } // Anything not an attribute - see below - should be a name value // pair and be processed here typedef detail::common_iarchive detail_common_iarchive; template void load_override( #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING const #endif boost::serialization::nvp< T > & t, int ){ this->This()->load_start(t.name()); this->detail_common_iarchive::load_override(t.value(), 0); this->This()->load_end(t.name()); } // specific overrides for attributes - handle as // primitives. These are not name-value pairs // so they have to be intercepted here and passed on to load. // although the class_id is included in the xml text file in order // to make the file self describing, it isn't used when loading // an xml archive. So we can skip it here. Note: we MUST override // it otherwise it will be loaded as a normal primitive w/o tag and // leaving the archive in an undetermined state void load_override(class_id_optional_type & /* t */, int){} BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_override(object_id_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_override(version_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_override(class_id_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_override(tracking_type & t, int); // class_name_type can't be handled here as it depends upon the // char type used by the stream. So require the derived implementation // handle this. // void load_override(class_name_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_xml_iarchive(unsigned int flags); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~basic_xml_iarchive(); }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP basic_xml_oarchive.hpp000444000765000024 1127512161110670 24263 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // class basic_xml_oarchive - write serialized objects to a xml output stream template class basic_xml_oarchive : public detail::common_oarchive { protected: #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) public: #elif defined(BOOST_MSVC) // for some inexplicable reason insertion of "class" generates compile erro // on msvc 7.1 friend detail::interface_oarchive; friend class save_access; #else friend class detail::interface_oarchive; friend class save_access; #endif // special stuff for xml output unsigned int depth; bool indent_next; bool pending_preamble; BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) indent(); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) init(); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) write_attribute( const char *attribute_name, int t, const char *conjunction = "=\"" ); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) write_attribute( const char *attribute_name, const char *key ); // helpers used below BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_start(const char *name); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_end(const char *name); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) end_preamble(); // Anything not an attribute and not a name-value pair is an // error and should be trapped here. template void save_override(T & t, BOOST_PFTO int) { // If your program fails to compile here, its most likely due to // not specifying an nvp wrapper around the variable to // be serialized. BOOST_MPL_ASSERT((serialization::is_wrapper< T >)); this->detail_common_oarchive::save_override(t, 0); } // special treatment for name-value pairs. typedef detail::common_oarchive detail_common_oarchive; template void save_override( #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING const #endif ::boost::serialization::nvp< T > & t, int ){ this->This()->save_start(t.name()); this->detail_common_oarchive::save_override(t.const_value(), 0); this->This()->save_end(t.name()); } // specific overrides for attributes - not name value pairs so we // want to trap them before the above "fall through" BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_override(const object_id_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_override(const object_reference_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_override(const version_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_override(const class_id_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_override(const class_id_optional_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_override(const class_id_reference_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_override(const class_name_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) save_override(const tracking_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_xml_oarchive(unsigned int flags); BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~basic_xml_oarchive(); }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP binary_iarchive.hpp000444000765000024 653312161110613 23556 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BINARY_IARCHIVE_HPP #define BOOST_ARCHIVE_BINARY_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_iarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { // do not derive from the classes below. If you want to extend this functionality // via inhertance, derived from text_iarchive_impl instead. This will // preserve correct static polymorphism. // same as binary_iarchive below - without the shared_ptr_helper class naked_binary_iarchive : public binary_iarchive_impl< boost::archive::naked_binary_iarchive, std::istream::char_type, std::istream::traits_type > { public: naked_binary_iarchive(std::istream & is, unsigned int flags = 0) : binary_iarchive_impl< naked_binary_iarchive, std::istream::char_type, std::istream::traits_type >(is, flags) {} naked_binary_iarchive(std::streambuf & bsb, unsigned int flags = 0) : binary_iarchive_impl< naked_binary_iarchive, std::istream::char_type, std::istream::traits_type >(bsb, flags) {} }; } // namespace archive } // namespace boost // note special treatment of shared_ptr. This type needs a special // structure associated with every archive. We created a "mix-in" // class to provide this functionality. Since shared_ptr holds a // special esteem in the boost library - we included it here by default. #include namespace boost { namespace archive { // do not derive from this class. If you want to extend this functionality // via inhertance, derived from binary_iarchive_impl instead. This will // preserve correct static polymorphism. class binary_iarchive : public binary_iarchive_impl< boost::archive::binary_iarchive, std::istream::char_type, std::istream::traits_type >, public detail::shared_ptr_helper { public: binary_iarchive(std::istream & is, unsigned int flags = 0) : binary_iarchive_impl< binary_iarchive, std::istream::char_type, std::istream::traits_type >(is, flags) {} binary_iarchive(std::streambuf & bsb, unsigned int flags = 0) : binary_iarchive_impl< binary_iarchive, std::istream::char_type, std::istream::traits_type >(bsb, flags) {} }; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::binary_iarchive) BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::archive::binary_iarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_BINARY_IARCHIVE_HPP binary_iarchive_impl.hpp000444000765000024 557012161110664 24605 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP #define BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_iarchive_impl.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class binary_iarchive_impl : public basic_binary_iprimitive, public basic_binary_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_iarchive; friend class basic_binary_iarchive; friend class load_access; protected: #endif // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! // make this protected so it can be called from a derived archive template void load_override(T & t, BOOST_PFTO int){ this->basic_binary_iarchive::load_override(t, 0L); } void init(unsigned int flags){ if(0 != (flags & no_header)) return; #if ! defined(__MWERKS__) this->basic_binary_iarchive::init(); this->basic_binary_iprimitive::init(); #else basic_binary_iarchive::init(); basic_binary_iprimitive::init(); #endif } binary_iarchive_impl( std::basic_streambuf & bsb, unsigned int flags ) : basic_binary_iprimitive( bsb, 0 != (flags & no_codecvt) ), basic_binary_iarchive(flags) { init(flags); } binary_iarchive_impl( std::basic_istream & is, unsigned int flags ) : basic_binary_iprimitive( * is.rdbuf(), 0 != (flags & no_codecvt) ), basic_binary_iarchive(flags) { init(flags); } }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP binary_oarchive.hpp000444000765000024 404512161110672 23565 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BINARY_OARCHIVE_HPP #define BOOST_ARCHIVE_BINARY_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { // do not derive from this class. If you want to extend this functionality // via inhertance, derived from binary_oarchive_impl instead. This will // preserve correct static polymorphism. class binary_oarchive : public binary_oarchive_impl< binary_oarchive, std::ostream::char_type, std::ostream::traits_type > { public: binary_oarchive(std::ostream & os, unsigned int flags = 0) : binary_oarchive_impl< binary_oarchive, std::ostream::char_type, std::ostream::traits_type >(os, flags) {} binary_oarchive(std::streambuf & bsb, unsigned int flags = 0) : binary_oarchive_impl< binary_oarchive, std::ostream::char_type, std::ostream::traits_type >(bsb, flags) {} }; typedef binary_oarchive naked_binary_oarchive; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::binary_oarchive) BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::archive::binary_oarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_BINARY_OARCHIVE_HPP binary_oarchive_impl.hpp000444000765000024 562612161110676 24620 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP #define BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_oarchive_impl.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class binary_oarchive_impl : public basic_binary_oprimitive, public basic_binary_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_oarchive; friend class basic_binary_oarchive; friend class save_access; protected: #endif // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! // make this protected so it can be called from a derived archive template void save_override(T & t, BOOST_PFTO int){ this->basic_binary_oarchive::save_override(t, 0L); } void init(unsigned int flags) { if(0 != (flags & no_header)) return; #if ! defined(__MWERKS__) this->basic_binary_oarchive::init(); this->basic_binary_oprimitive::init(); #else basic_binary_oarchive::init(); basic_binary_oprimitive::init(); #endif } binary_oarchive_impl( std::basic_streambuf & bsb, unsigned int flags ) : basic_binary_oprimitive( bsb, 0 != (flags & no_codecvt) ), basic_binary_oarchive(flags) { init(flags); } binary_oarchive_impl( std::basic_ostream & os, unsigned int flags ) : basic_binary_oprimitive( * os.rdbuf(), 0 != (flags & no_codecvt) ), basic_binary_oarchive(flags) { init(flags); } }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP binary_wiarchive.hpp000444000765000024 565712161110612 23752 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP #define BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_wiarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #ifdef BOOST_NO_STD_WSTREAMBUF #error "wide char i/o not supported on this platform" #else #include // wistream #include #include namespace boost { namespace archive { // same as binary_wiarchive below - without the shared_ptr_helper class naked_binary_wiarchive : public binary_iarchive_impl< boost::archive::naked_binary_wiarchive, std::wistream::char_type, std::wistream::traits_type > { public: naked_binary_wiarchive(std::wistream & is, unsigned int flags = 0) : binary_iarchive_impl< naked_binary_wiarchive, std::wistream::char_type, std::wistream::traits_type >(is, flags) {} naked_binary_wiarchive(std::wstreambuf & bsb, unsigned int flags = 0) : binary_iarchive_impl< naked_binary_wiarchive, std::wistream::char_type, std::wistream::traits_type >(bsb, flags) {} }; } // namespace archive } // namespace boost // note special treatment of shared_ptr. This type needs a special // structure associated with every archive. We created a "mix-in" // class to provide this functionality. Since shared_ptr holds a // special esteem in the boost library - we included it here by default. #include namespace boost { namespace archive { class binary_wiarchive : public binary_iarchive_impl< binary_wiarchive, std::wistream::char_type, std::wistream::traits_type > { public: binary_wiarchive(std::wistream & is, unsigned int flags = 0) : binary_iarchive_impl< binary_wiarchive, std::wistream::char_type, std::wistream::traits_type >(is, flags) {} binary_wiarchive(std::wstreambuf & bsb, unsigned int flags = 0) : binary_iarchive_impl< binary_wiarchive, std::wistream::char_type, std::wistream::traits_type >(bsb, flags) {} }; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::binary_wiarchive) #endif // BOOST_NO_STD_WSTREAMBUF #endif // BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP binary_woarchive.hpp000444000765000024 374712161110677 23771 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP #define BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_woarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #ifdef BOOST_NO_STD_WSTREAMBUF #error "wide char i/o not supported on this platform" #else #include #include #include namespace boost { namespace archive { // do not derive from this class. If you want to extend this functionality // via inhertance, derived from binary_oarchive_impl instead. This will // preserve correct static polymorphism. class binary_woarchive : public binary_oarchive_impl< binary_woarchive, std::wostream::char_type, std::wostream::traits_type > { public: binary_woarchive(std::wostream & os, unsigned int flags = 0) : binary_oarchive_impl< binary_woarchive, std::wostream::char_type, std::wostream::traits_type >(os, flags) {} binary_woarchive(std::wstreambuf & bsb, unsigned int flags = 0) : binary_oarchive_impl< binary_woarchive, std::wostream::char_type, std::wostream::traits_type >(bsb, flags) {} }; typedef binary_woarchive naked_binary_woarchive; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::binary_woarchive) #endif // BOOST_NO_STD_WSTREAMBUF #endif // BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP codecvt_null.hpp000444000765000024 560512161110637 23106 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_CODECVT_NULL_HPP #define BOOST_ARCHIVE_CODECVT_NULL_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // codecvt_null.hpp: // (C) Copyright 2004 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // NULL, size_t #include // for mbstate_t #include #include #include // must be the last header #if defined(BOOST_NO_STDC_NAMESPACE) namespace std { // For STLport on WinCE, BOOST_NO_STDC_NAMESPACE can get defined if STLport is putting symbols in its own namespace. // In the case of codecvt, however, this does not mean that codecvt is in the global namespace (it will be in STLport's namespace) # if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) using ::codecvt; # endif using ::mbstate_t; using ::size_t; } // namespace #endif #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class codecvt_null; template<> class codecvt_null : public std::codecvt { virtual bool do_always_noconv() const throw() { return true; } public: explicit codecvt_null(std::size_t no_locale_manage = 0) : std::codecvt(no_locale_manage) {} }; template<> class codecvt_null : public std::codecvt { virtual BOOST_WARCHIVE_DECL(std::codecvt_base::result) do_out( std::mbstate_t & state, const wchar_t * first1, const wchar_t * last1, const wchar_t * & next1, char * first2, char * last2, char * & next2 ) const; virtual BOOST_WARCHIVE_DECL(std::codecvt_base::result) do_in( std::mbstate_t & state, const char * first1, const char * last1, const char * & next1, wchar_t * first2, wchar_t * last2, wchar_t * & next2 ) const; virtual int do_encoding( ) const throw( ){ return sizeof(wchar_t) / sizeof(char); } virtual int do_max_length( ) const throw( ){ return do_encoding(); } }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC # pragma warning(pop) #endif #include // pop pragmas #endif //BOOST_ARCHIVE_CODECVT_NULL_HPP dinkumware.hpp000444000765000024 1301112161110636 22600 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_DINKUMWARE_HPP #define BOOST_ARCHIVE_DINKUMWARE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // dinkumware.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // this file adds a couple of things that are missing from the dinkumware // implementation of the standard library. #include #include #include #include namespace std { // define i/o operators for 64 bit integers template basic_ostream & operator<<(basic_ostream & os, boost::uint64_t t){ // octal rendering of 64 bit number would be 22 octets + eos CharType d[23]; unsigned int radix; if(os.flags() & (int)std::ios_base::hex) radix = 16; else if(os.flags() & (int)std::ios_base::oct) radix = 8; else //if(s.flags() & (int)std::ios_base::dec) radix = 10; unsigned int i = 0; do{ unsigned int j = t % radix; d[i++] = j + ((j < 10) ? '0' : ('a' - 10)); t /= radix; } while(t > 0); d[i--] = '\0'; // reverse digits unsigned int j = 0; while(j < i){ CharType k = d[i]; d[i] = d[j]; d[j] = k; --i;++j; } os << d; return os; } template basic_ostream & operator<<(basic_ostream &os, boost::int64_t t){ if(0 <= t){ os << static_cast(t); } else{ os.put('-'); os << -t; } return os; } template basic_istream & operator>>(basic_istream &is, boost::int64_t & t){ CharType d; do{ d = is.get(); } while(::isspace(d)); bool negative = (d == '-'); if(negative) d = is.get(); unsigned int radix; if(is.flags() & (int)std::ios_base::hex) radix = 16; else if(is.flags() & (int)std::ios_base::oct) radix = 8; else //if(s.flags() & (int)std::ios_base::dec) radix = 10; t = 0; do{ if('0' <= d && d <= '9') t = t * radix + (d - '0'); else if('a' <= d && d <= 'f') t = t * radix + (d - 'a' + 10); else break; d = is.get(); } while(!is.fail()); // restore the delimiter is.putback(d); is.clear(); if(negative) t = -t; return is; } template basic_istream & operator>>(basic_istream &is, boost::uint64_t & t){ boost::int64_t it; is >> it; t = it; return is; } //#endif template<> class back_insert_iterator > : public iterator { public: typedef basic_string container_type; typedef container_type::reference reference; explicit back_insert_iterator(container_type & s) : container(& s) {} // construct with container back_insert_iterator & operator=( container_type::const_reference Val_ ){ // push value into container //container->push_back(Val_); *container += Val_; return (*this); } back_insert_iterator & operator*(){ return (*this); } back_insert_iterator & operator++(){ // pretend to preincrement return (*this); } back_insert_iterator operator++(int){ // pretend to postincrement return (*this); } protected: container_type *container; // pointer to container }; template inline back_insert_iterator > back_inserter( basic_string & s ){ return (std::back_insert_iterator >(s)); } template<> class back_insert_iterator > : public iterator { public: typedef basic_string container_type; typedef container_type::reference reference; explicit back_insert_iterator(container_type & s) : container(& s) {} // construct with container back_insert_iterator & operator=( container_type::const_reference Val_ ){ // push value into container //container->push_back(Val_); *container += Val_; return (*this); } back_insert_iterator & operator*(){ return (*this); } back_insert_iterator & operator++(){ // pretend to preincrement return (*this); } back_insert_iterator operator++(int){ // pretend to postincrement return (*this); } protected: container_type *container; // pointer to container }; template inline back_insert_iterator > back_inserter( basic_string & s ){ return (std::back_insert_iterator >(s)); } } // namespace std #endif //BOOST_ARCHIVE_DINKUMWARE_HPP polymorphic_iarchive.hpp000444000765000024 1332112161110636 24655 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP #define BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // polymorphic_iarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // std::size_t #include // ULONG_MAX #include #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include #include #include // must be the last header namespace boost { template class shared_ptr; namespace serialization { class extended_type_info; } // namespace serialization namespace archive { namespace detail { class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive; } class polymorphic_iarchive; class polymorphic_iarchive_impl : public detail::interface_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_iarchive; friend class load_access; #endif // primitive types the only ones permitted by polymorphic archives virtual void load(bool & t) = 0; virtual void load(char & t) = 0; virtual void load(signed char & t) = 0; virtual void load(unsigned char & t) = 0; #ifndef BOOST_NO_CWCHAR #ifndef BOOST_NO_INTRINSIC_WCHAR_T virtual void load(wchar_t & t) = 0; #endif #endif virtual void load(short & t) = 0; virtual void load(unsigned short & t) = 0; virtual void load(int & t) = 0; virtual void load(unsigned int & t) = 0; virtual void load(long & t) = 0; virtual void load(unsigned long & t) = 0; #if defined(BOOST_HAS_LONG_LONG) virtual void load(boost::long_long_type & t) = 0; virtual void load(boost::ulong_long_type & t) = 0; #elif defined(BOOST_HAS_MS_INT64) virtual void load(__int64 & t) = 0; virtual void load(unsigned __int64 & t) = 0; #endif virtual void load(float & t) = 0; virtual void load(double & t) = 0; // string types are treated as primitives virtual void load(std::string & t) = 0; #ifndef BOOST_NO_STD_WSTRING virtual void load(std::wstring & t) = 0; #endif // used for xml and other tagged formats virtual void load_start(const char * name) = 0; virtual void load_end(const char * name) = 0; virtual void register_basic_serializer(const detail::basic_iserializer & bis) = 0; // msvc and borland won't automatically pass these to the base class so // make it explicit here template void load_override(T & t, BOOST_PFTO int) { archive::load(* this->This(), t); } // special treatment for name-value pairs. template void load_override( #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING const #endif boost::serialization::nvp< T > & t, int ){ load_start(t.name()); archive::load(* this->This(), t.value()); load_end(t.name()); } protected: virtual ~polymorphic_iarchive_impl(){}; public: // utility function implemented by all legal archives virtual void set_library_version(library_version_type archive_library_version) = 0; virtual library_version_type get_library_version() const = 0; virtual unsigned int get_flags() const = 0; virtual void delete_created_pointers() = 0; virtual void reset_object_address( const void * new_address, const void * old_address ) = 0; virtual void load_binary(void * t, std::size_t size) = 0; // these are used by the serialization library implementation. virtual void load_object( void *t, const detail::basic_iserializer & bis ) = 0; virtual const detail::basic_pointer_iserializer * load_pointer( void * & t, const detail::basic_pointer_iserializer * bpis_ptr, const detail::basic_pointer_iserializer * (*finder)( const boost::serialization::extended_type_info & type ) ) = 0; }; } // namespace archive } // namespace boost #include // pops abi_suffix.hpp pragmas // note special treatment of shared_ptr. This type needs a special // structure associated with every archive. We created a "mix-in" // class to provide this functionality. Since shared_ptr holds a // special esteem in the boost library - we included it here by default. #include namespace boost { namespace archive { class polymorphic_iarchive : public polymorphic_iarchive_impl, public detail::shared_ptr_helper { public: virtual ~polymorphic_iarchive(){}; }; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::polymorphic_iarchive) #endif // BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP polymorphic_oarchive.hpp000444000765000024 1200312161110644 24656 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP #define BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // polymorphic_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // size_t #include // ULONG_MAX #include #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include #include #include // must be the last header namespace boost { template class shared_ptr; namespace serialization { class extended_type_info; } // namespace serialization namespace archive { namespace detail { class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer; } class polymorphic_oarchive; class polymorphic_oarchive_impl : public detail::interface_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_oarchive; friend class save_access; #endif // primitive types the only ones permitted by polymorphic archives virtual void save(const bool t) = 0; virtual void save(const char t) = 0; virtual void save(const signed char t) = 0; virtual void save(const unsigned char t) = 0; #ifndef BOOST_NO_CWCHAR #ifndef BOOST_NO_INTRINSIC_WCHAR_T virtual void save(const wchar_t t) = 0; #endif #endif virtual void save(const short t) = 0; virtual void save(const unsigned short t) = 0; virtual void save(const int t) = 0; virtual void save(const unsigned int t) = 0; virtual void save(const long t) = 0; virtual void save(const unsigned long t) = 0; #if defined(BOOST_HAS_LONG_LONG) virtual void save(const boost::long_long_type t) = 0; virtual void save(const boost::ulong_long_type t) = 0; #elif defined(BOOST_HAS_MS_INT64) virtual void save(const __int64 t) = 0; virtual void save(const unsigned __int64 t) = 0; #endif virtual void save(const float t) = 0; virtual void save(const double t) = 0; // string types are treated as primitives virtual void save(const std::string & t) = 0; #ifndef BOOST_NO_STD_WSTRING virtual void save(const std::wstring & t) = 0; #endif virtual void save_null_pointer() = 0; // used for xml and other tagged formats virtual void save_start(const char * name) = 0; virtual void save_end(const char * name) = 0; virtual void register_basic_serializer(const detail::basic_oserializer & bos) = 0; virtual void end_preamble() = 0; // msvc and borland won't automatically pass these to the base class so // make it explicit here template void save_override(T & t, BOOST_PFTO int) { archive::save(* this->This(), t); } // special treatment for name-value pairs. template void save_override( #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING const #endif ::boost::serialization::nvp< T > & t, int ){ save_start(t.name()); archive::save(* this->This(), t.const_value()); save_end(t.name()); } protected: virtual ~polymorphic_oarchive_impl(){}; public: // utility functions implemented by all legal archives virtual unsigned int get_flags() const = 0; virtual library_version_type get_library_version() const = 0; virtual void save_binary(const void * t, std::size_t size) = 0; virtual void save_object( const void *x, const detail::basic_oserializer & bos ) = 0; virtual void save_pointer( const void * t, const detail::basic_pointer_oserializer * bpos_ptr ) = 0; }; // note: preserve naming symmetry class polymorphic_oarchive : public polymorphic_oarchive_impl { public: virtual ~polymorphic_oarchive(){}; }; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::polymorphic_oarchive) #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP shared_ptr_helper.hpp000444000765000024 1654412161110601 24132 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP #define BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // shared_ptr_helper.hpp: serialization for boost shared pointern // (C) Copyright 2004-2009 Robert Ramey, Martin Ecker and Takatoshi Kondo // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include // NULL #include #include #include #include #include #include #include #include #include // must be the last headern namespace boost_132 { template class shared_ptr; } namespace boost { template class shared_ptr; namespace serialization { class extended_type_info; template inline void load( Archive & ar, boost::shared_ptr< T > &t, const unsigned int file_version ); } namespace archive{ namespace detail { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // a common class for holding various types of shared pointers class shared_ptr_helper { struct collection_type_compare { bool operator()( const shared_ptr &lhs, const shared_ptr &rhs )const{ return lhs.get() < rhs.get(); } }; typedef std::set< boost::shared_ptr, collection_type_compare > collection_type; typedef collection_type::const_iterator iterator_type; // list of shared_pointers create accessable by raw pointer. This // is used to "match up" shared pointers loaded at different // points in the archive. Note, we delay construction until // it is actually used since this is by default included as // a "mix-in" even if shared_ptr isn't used. collection_type * m_pointers; struct null_deleter { void operator()(void const *) const {} }; struct void_deleter { const boost::serialization::extended_type_info * m_eti; void_deleter(const boost::serialization::extended_type_info *eti) : m_eti(eti) {} void operator()(void *vp) const { m_eti->destroy(vp); } }; #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else template friend inline void boost::serialization::load( Archive & ar, boost::shared_ptr< T > &t, const unsigned int file_version ); #endif // #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP // list of loaded pointers. This is used to be sure that the pointers // stay around long enough to be "matched" with other pointers loaded // by the same archive. These are created with a "null_deleter" so that // when this list is destroyed - the underlaying raw pointers are not // destroyed. This has to be done because the pointers are also held by // new system which is disjoint from this set. This is implemented // by a change in load_construct_data below. It makes this file suitable // only for loading pointers into a 1.33 or later boost system. std::list > * m_pointers_132; // #endif // returns pointer to object and an indicator whether this is a // new entry (true) or a previous one (false) BOOST_ARCHIVE_DECL(shared_ptr) get_od( const void * od, const boost::serialization::extended_type_info * true_type, const boost::serialization::extended_type_info * this_type ); BOOST_ARCHIVE_DECL(void) append(const boost::shared_ptr &); template struct non_polymorphic { static const boost::serialization::extended_type_info * get_object_identifier(T &){ return & boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type >::get_const_instance(); } }; template struct polymorphic { static const boost::serialization::extended_type_info * get_object_identifier(T & t){ return boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type >::get_const_instance().get_derived_extended_type_info(t); } }; public: template void reset(shared_ptr< T > & s, T * t){ if(NULL == t){ s.reset(); return; } const boost::serialization::extended_type_info * this_type = & boost::serialization::type_info_implementation< T >::type ::get_const_instance(); // get pointer to the most derived object. This is effectively // the object identifern typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< is_polymorphic< T >, mpl::identity >, mpl::identity > >::type type; const boost::serialization::extended_type_info * true_type = type::get_object_identifier(*t); // note:if this exception is thrown, be sure that derived pointern // is either registered or exported. if(NULL == true_type) boost::serialization::throw_exception( archive_exception( archive_exception::unregistered_class, this_type->get_debug_info() ) ); shared_ptr r = get_od( static_cast(t), true_type, this_type ); if(!r){ s.reset(t); const void * od = void_downcast( *true_type, *this_type, static_cast(t) ); shared_ptr sp(s, od); append(sp); } else{ s = shared_ptr< T >( r, static_cast(r.get()) ); } } // #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP BOOST_ARCHIVE_DECL(void) append(const boost_132::shared_ptr & t); // #endif public: BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) shared_ptr_helper(); BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) ~shared_ptr_helper(); }; } // namespace detail } // namespace archive } // namespace boost #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP text_iarchive.hpp000444000765000024 1125412161110603 23271 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_TEXT_IARCHIVE_HPP #define BOOST_ARCHIVE_TEXT_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_iarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class text_iarchive_impl : public basic_text_iprimitive, public basic_text_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_iarchive; friend class basic_text_iarchive; friend class load_access; protected: #endif template void load(T & t){ basic_text_iprimitive::load(t); } void load(version_type & t){ unsigned int v; load(v); t = version_type(v); } void load(boost::serialization::item_version_type & t){ unsigned int v; load(v); t = boost::serialization::item_version_type(v); } BOOST_ARCHIVE_DECL(void) load(char * t); #ifndef BOOST_NO_INTRINSIC_WCHAR_T BOOST_ARCHIVE_DECL(void) load(wchar_t * t); #endif BOOST_ARCHIVE_DECL(void) load(std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_ARCHIVE_DECL(void) load(std::wstring &ws); #endif // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! // make this protected so it can be called from a derived archive template void load_override(T & t, BOOST_PFTO int){ basic_text_iarchive::load_override(t, 0); } BOOST_ARCHIVE_DECL(void) load_override(class_name_type & t, int); BOOST_ARCHIVE_DECL(void) init(); BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) text_iarchive_impl(std::istream & is, unsigned int flags); // don't import inline definitions! leave this as a reminder. //BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) ~text_iarchive_impl(){}; }; // do not derive from the classes below. If you want to extend this functionality // via inhertance, derived from text_iarchive_impl instead. This will // preserve correct static polymorphism. // same as text_iarchive below - without the shared_ptr_helper class naked_text_iarchive : public text_iarchive_impl { public: naked_text_iarchive(std::istream & is_, unsigned int flags = 0) : // note: added _ to suppress useless gcc warning text_iarchive_impl(is_, flags) {} ~naked_text_iarchive(){} }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas // note special treatment of shared_ptr. This type needs a special // structure associated with every archive. We created a "mix-in" // class to provide this functionality. Since shared_ptr holds a // special esteem in the boost library - we included it here by default. #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { class text_iarchive : public text_iarchive_impl, public detail::shared_ptr_helper { public: text_iarchive(std::istream & is_, unsigned int flags = 0) : // note: added _ to suppress useless gcc warning text_iarchive_impl(is_, flags) {} ~text_iarchive(){} }; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::text_iarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_TEXT_IARCHIVE_HPP text_oarchive.hpp000444000765000024 703412161110611 23257 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_TEXT_OARCHIVE_HPP #define BOOST_ARCHIVE_TEXT_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // std::size_t #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class text_oarchive_impl : /* protected ? */ public basic_text_oprimitive, public basic_text_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_oarchive; friend class basic_text_oarchive; friend class save_access; protected: #endif template void save(const T & t){ this->newtoken(); basic_text_oprimitive::save(t); } void save(const version_type & t){ save(static_cast(t)); } void save(const boost::serialization::item_version_type & t){ save(static_cast(t)); } BOOST_ARCHIVE_DECL(void) save(const char * t); #ifndef BOOST_NO_INTRINSIC_WCHAR_T BOOST_ARCHIVE_DECL(void) save(const wchar_t * t); #endif BOOST_ARCHIVE_DECL(void) save(const std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_ARCHIVE_DECL(void) save(const std::wstring &ws); #endif BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) text_oarchive_impl(std::ostream & os, unsigned int flags); // don't import inline definitions! leave this as a reminder. //BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) ~text_oarchive_impl(){}; public: BOOST_ARCHIVE_DECL(void) save_binary(const void *address, std::size_t count); }; // do not derive from this class. If you want to extend this functionality // via inhertance, derived from text_oarchive_impl instead. This will // preserve correct static polymorphism. class text_oarchive : public text_oarchive_impl { public: text_oarchive(std::ostream & os_, unsigned int flags = 0) : // note: added _ to suppress useless gcc warning text_oarchive_impl(os_, flags) {} ~text_oarchive(){} }; typedef text_oarchive naked_text_oarchive; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::text_oarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_TEXT_OARCHIVE_HPP text_wiarchive.hpp000444000765000024 1064712161110601 23463 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP #define BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_wiarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #ifdef BOOST_NO_STD_WSTREAMBUF #error "wide char i/o not supported on this platform" #else #include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class text_wiarchive_impl : public basic_text_iprimitive, public basic_text_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_iarchive; friend class basic_text_iarchive; friend class load_access; protected: #endif template void load(T & t){ basic_text_iprimitive::load(t); } void load(version_type & t){ unsigned int v; load(v); t = version_type(v); } void load(boost::serialization::item_version_type & t){ unsigned int v; load(v); t = boost::serialization::item_version_type(v); } BOOST_WARCHIVE_DECL(void) load(char * t); #ifndef BOOST_NO_INTRINSIC_WCHAR_T BOOST_WARCHIVE_DECL(void) load(wchar_t * t); #endif BOOST_WARCHIVE_DECL(void) load(std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_WARCHIVE_DECL(void) load(std::wstring &ws); #endif // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! template void load_override(T & t, BOOST_PFTO int){ basic_text_iarchive::load_override(t, 0); } BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) text_wiarchive_impl(std::wistream & is, unsigned int flags); ~text_wiarchive_impl(){}; }; // do not derive from the classes below. If you want to extend this functionality // via inhertance, derived from text_iarchive_impl instead. This will // preserve correct static polymorphism. // same as text_wiarchive below - without the shared_ptr_helper class naked_text_wiarchive : public text_wiarchive_impl { public: naked_text_wiarchive(std::wistream & is, unsigned int flags = 0) : text_wiarchive_impl(is, flags) {} ~naked_text_wiarchive(){} }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas // note special treatment of shared_ptr. This type needs a special // structure associated with every archive. We created a "mix-in" // class to provide this functionality. Since shared_ptr holds a // special esteem in the boost library - we included it here by default. #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { class text_wiarchive : public text_wiarchive_impl, public detail::shared_ptr_helper { public: text_wiarchive(std::wistream & is, unsigned int flags = 0) : text_wiarchive_impl(is, flags) {} ~text_wiarchive(){} }; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::text_wiarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_NO_STD_WSTREAMBUF #endif // BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP text_woarchive.hpp000444000765000024 1023712161110602 23465 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP #define BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_woarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #ifdef BOOST_NO_STD_WSTREAMBUF #error "wide char i/o not supported on this platform" #else #include #include // size_t #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class text_woarchive_impl : public basic_text_oprimitive, public basic_text_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_oarchive; friend class basic_text_oarchive; friend class save_access; protected: #endif template void save(const T & t){ this->newtoken(); basic_text_oprimitive::save(t); } void save(const version_type & t){ save(static_cast(t)); } void save(const boost::serialization::item_version_type & t){ save(static_cast(t)); } BOOST_WARCHIVE_DECL(void) save(const char * t); #ifndef BOOST_NO_INTRINSIC_WCHAR_T BOOST_WARCHIVE_DECL(void) save(const wchar_t * t); #endif BOOST_WARCHIVE_DECL(void) save(const std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_WARCHIVE_DECL(void) save(const std::wstring &ws); #endif text_woarchive_impl(std::wostream & os, unsigned int flags) : basic_text_oprimitive( os, 0 != (flags & no_codecvt) ), basic_text_oarchive(flags) { if(0 == (flags & no_header)) basic_text_oarchive::init(); } public: void save_binary(const void *address, std::size_t count){ put(static_cast('\n')); this->end_preamble(); #if ! defined(__MWERKS__) this->basic_text_oprimitive::save_binary( #else this->basic_text_oprimitive::save_binary( #endif address, count ); put(static_cast('\n')); this->delimiter = this->none; } }; // we use the following because we can't use // typedef text_oarchive_impl > text_oarchive; // do not derive from this class. If you want to extend this functionality // via inhertance, derived from text_oarchive_impl instead. This will // preserve correct static polymorphism. class text_woarchive : public text_woarchive_impl { public: text_woarchive(std::wostream & os, unsigned int flags = 0) : text_woarchive_impl(os, flags) {} ~text_woarchive(){} }; typedef text_woarchive naked_text_woarchive; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::text_woarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_NO_STD_WSTREAMBUF #endif // BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP wcslen.hpp000444000765000024 253012161110671 21710 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_WCSLEN_HPP #define BOOST_ARCHIVE_WCSLEN_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // wcslen.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // size_t #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #ifndef BOOST_NO_CWCHAR // a couple of libraries which include wchar_t don't include // wcslen #if defined(BOOST_DINKUMWARE_STDLIB) && BOOST_DINKUMWARE_STDLIB < 306 \ || defined(__LIBCOMO__) namespace std { inline std::size_t wcslen(const wchar_t * ws) { const wchar_t * eows = ws; while(* eows != 0) ++eows; return eows - ws; } } // namespace std #else #include #ifdef BOOST_NO_STDC_NAMESPACE namespace std{ using ::wcslen; } #endif #endif // wcslen #endif //BOOST_NO_CWCHAR #endif //BOOST_ARCHIVE_WCSLEN_HPP xml_archive_exception.hpp000444000765000024 331312161110663 24775 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_XML_ARCHIVE_EXCEPTION_HPP #define BOOST_ARCHIVE_XML_ARCHIVE_EXCEPTION_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_archive_exception.hpp: // (C) Copyright 2007 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include #include #include // must be the last header namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // exceptions thrown by xml archives // class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) xml_archive_exception : public virtual boost::archive::archive_exception { public: typedef enum { xml_archive_parsing_error, // see save_register xml_archive_tag_mismatch, xml_archive_tag_name_error } exception_code; xml_archive_exception( exception_code c, const char * e1 = NULL, const char * e2 = NULL ); }; }// namespace archive }// namespace boost #include // pops abi_suffix.hpp pragmas #endif //BOOST_XML_ARCHIVE_ARCHIVE_EXCEPTION_HPP xml_iarchive.hpp000444000765000024 1116512161110610 23104 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_XML_IARCHIVE_HPP #define BOOST_ARCHIVE_XML_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_iarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include //#include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class basic_xml_grammar; typedef basic_xml_grammar xml_grammar; template class xml_iarchive_impl : public basic_text_iprimitive, public basic_xml_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_iarchive; friend class basic_xml_iarchive; friend class load_access; protected: #endif // instances of micro xml parser to parse start preambles // scoped_ptr doesn't play nice with borland - so use a naked pointer // scoped_ptr gimpl; xml_grammar *gimpl; std::istream & get_is(){ return is; } template void load(T & t){ basic_text_iprimitive::load(t); } void load(version_type & t){ unsigned int v; load(v); t = version_type(v); } void load(boost::serialization::item_version_type & t){ unsigned int v; load(v); t = boost::serialization::item_version_type(v); } BOOST_ARCHIVE_DECL(void) load(char * t); #ifndef BOOST_NO_INTRINSIC_WCHAR_T BOOST_ARCHIVE_DECL(void) load(wchar_t * t); #endif BOOST_ARCHIVE_DECL(void) load(std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_ARCHIVE_DECL(void) load(std::wstring &ws); #endif template void load_override(T & t, BOOST_PFTO int){ basic_xml_iarchive::load_override(t, 0); } BOOST_ARCHIVE_DECL(void) load_override(class_name_type & t, int); BOOST_ARCHIVE_DECL(void) init(); BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) xml_iarchive_impl(std::istream & is, unsigned int flags); BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) ~xml_iarchive_impl(); }; // do not derive from the classes below. If you want to extend this functionality // via inhertance, derived from text_iarchive_impl instead. This will // preserve correct static polymorphism. // same as xml_iarchive below - without the shared_ptr_helper class naked_xml_iarchive : public xml_iarchive_impl { public: naked_xml_iarchive(std::istream & is, unsigned int flags = 0) : xml_iarchive_impl(is, flags) {} ~naked_xml_iarchive(){} }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas // note special treatment of shared_ptr. This type needs a special // structure associated with every archive. We created a "mix-in" // class to provide this functionality. Since shared_ptr holds a // special esteem in the boost library - we included it here by default. #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { class xml_iarchive : public xml_iarchive_impl, public detail::shared_ptr_helper { public: xml_iarchive(std::istream & is, unsigned int flags = 0) : xml_iarchive_impl(is, flags) {} ~xml_iarchive(){}; }; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::xml_iarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_XML_IARCHIVE_HPP xml_oarchive.hpp000444000765000024 743312161110650 23101 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_XML_OARCHIVE_HPP #define BOOST_ARCHIVE_XML_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // size_t #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class xml_oarchive_impl : public basic_text_oprimitive, public basic_xml_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_oarchive; friend class basic_xml_oarchive; friend class save_access; protected: #endif //void end_preamble(){ // basic_xml_oarchive::end_preamble(); //} template void save(const T & t){ basic_text_oprimitive::save(t); } void save(const version_type & t){ save(static_cast(t)); } void save(const boost::serialization::item_version_type & t){ save(static_cast(t)); } BOOST_ARCHIVE_DECL(void) save(const char * t); #ifndef BOOST_NO_INTRINSIC_WCHAR_T BOOST_ARCHIVE_DECL(void) save(const wchar_t * t); #endif BOOST_ARCHIVE_DECL(void) save(const std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_ARCHIVE_DECL(void) save(const std::wstring &ws); #endif BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) xml_oarchive_impl(std::ostream & os, unsigned int flags); ~xml_oarchive_impl(){} public: void save_binary(const void *address, std::size_t count){ this->end_preamble(); #if ! defined(__MWERKS__) this->basic_text_oprimitive::save_binary( #else this->basic_text_oprimitive::save_binary( #endif address, count ); this->indent_next = true; } }; // we use the following because we can't use // typedef xml_oarchive_impl > xml_oarchive; // do not derive from this class. If you want to extend this functionality // via inhertance, derived from xml_oarchive_impl instead. This will // preserve correct static polymorphism. class xml_oarchive : public xml_oarchive_impl { public: xml_oarchive(std::ostream & os, unsigned int flags = 0) : xml_oarchive_impl(os, flags) {} ~xml_oarchive(){} }; typedef xml_oarchive naked_xml_oarchive; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::xml_oarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP xml_wiarchive.hpp000444000765000024 1151212161110656 23301 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_XML_WIARCHIVE_HPP #define BOOST_ARCHIVE_XML_WIARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_wiarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #ifdef BOOST_NO_STD_WSTREAMBUF #error "wide char i/o not supported on this platform" #else #include //#include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class basic_xml_grammar; typedef basic_xml_grammar xml_wgrammar; template class xml_wiarchive_impl : public basic_text_iprimitive, public basic_xml_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_iarchive; friend class basic_xml_iarchive; friend class load_access; protected: #endif // instances of micro xml parser to parse start preambles // scoped_ptr doesn't play nice with borland - so use a naked pointer // scoped_ptr gimpl; xml_wgrammar *gimpl; std::wistream & get_is(){ return is; } template void load(T & t){ basic_text_iprimitive::load(t); } void load(version_type & t){ unsigned int v; load(v); t = version_type(v); } void load(boost::serialization::item_version_type & t){ unsigned int v; load(v); t = boost::serialization::item_version_type(v); } BOOST_WARCHIVE_DECL(void) load(char * t); #ifndef BOOST_NO_INTRINSIC_WCHAR_T BOOST_WARCHIVE_DECL(void) load(wchar_t * t); #endif BOOST_WARCHIVE_DECL(void) load(std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_WARCHIVE_DECL(void) load(std::wstring &ws); #endif template void load_override(T & t, BOOST_PFTO int){ basic_xml_iarchive::load_override(t, 0); } BOOST_WARCHIVE_DECL(void) load_override(class_name_type & t, int); BOOST_WARCHIVE_DECL(void) init(); BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) xml_wiarchive_impl(std::wistream & is, unsigned int flags) ; BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) ~xml_wiarchive_impl(); }; // do not derive from the classes below. If you want to extend this functionality // via inhertance, derived from xml_wiarchive_impl instead. This will // preserve correct static polymorphism. // same as xml_wiarchive below - without the shared_ptr_helper class naked_xml_wiarchive : public xml_wiarchive_impl { public: naked_xml_wiarchive(std::wistream & is, unsigned int flags = 0) : xml_wiarchive_impl(is, flags) {} ~naked_xml_wiarchive(){} }; } // namespace archive } // namespace boost #ifdef BOOST_MSVC # pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas // note special treatment of shared_ptr. This type needs a special // structure associated with every archive. We created a "mix-in" // class to provide this functionality. Since shared_ptr holds a // special esteem in the boost library - we included it here by default. #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { class xml_wiarchive : public xml_wiarchive_impl, public detail::shared_ptr_helper { public: xml_wiarchive(std::wistream & is, unsigned int flags = 0) : xml_wiarchive_impl(is, flags) {} ~xml_wiarchive(){} }; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::xml_wiarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_NO_STD_WSTREAMBUF #endif // BOOST_ARCHIVE_XML_WIARCHIVE_HPP xml_woarchive.hpp000444000765000024 771212161110641 23270 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive#ifndef BOOST_ARCHIVE_XML_WOARCHIVE_HPP #define BOOST_ARCHIVE_XML_WOARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_woarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #ifdef BOOST_NO_STD_WSTREAMBUF #error "wide char i/o not supported on this platform" #else #include // size_t #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { template class xml_woarchive_impl : public basic_text_oprimitive, public basic_xml_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else friend class detail::interface_oarchive; friend class basic_xml_oarchive; friend class save_access; protected: #endif //void end_preamble(){ // basic_xml_oarchive::end_preamble(); //} template void save(const T & t){ basic_text_oprimitive::save(t); } void save(const version_type & t){ save(static_cast(t)); } void save(const boost::serialization::item_version_type & t){ save(static_cast(t)); } BOOST_WARCHIVE_DECL(void) save(const char * t); #ifndef BOOST_NO_INTRINSIC_WCHAR_T BOOST_WARCHIVE_DECL(void) save(const wchar_t * t); #endif BOOST_WARCHIVE_DECL(void) save(const std::string &s); #ifndef BOOST_NO_STD_WSTRING BOOST_WARCHIVE_DECL(void) save(const std::wstring &ws); #endif BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) xml_woarchive_impl(std::wostream & os, unsigned int flags); ~xml_woarchive_impl(){} public: void save_binary(const void *address, std::size_t count){ this->end_preamble(); #if ! defined(__MWERKS__) this->basic_text_oprimitive::save_binary( #else this->basic_text_oprimitive::save_binary( #endif address, count ); this->indent_next = true; } }; // we use the following because we can't use // typedef xml_woarchive_impl > xml_woarchive; // do not derive from this class. If you want to extend this functionality // via inhertance, derived from xml_woarchive_impl instead. This will // preserve correct static polymorphism. class xml_woarchive : public xml_woarchive_impl { public: xml_woarchive(std::wostream & os, unsigned int flags = 0) : xml_woarchive_impl(os, flags) {} ~xml_woarchive(){} }; typedef xml_woarchive naked_xml_woarchive; } // namespace archive } // namespace boost // required by export BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::xml_woarchive) #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_NO_STD_WSTREAMBUF #endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP detail000755000765000024 012161110702 21004 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archiveabi_prefix.hpp000444000765000024 123712161110624 23770 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // abi_prefix.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4251 4231 4660 4275) #endif #if defined( __BORLANDC__ ) #pragma nopushoptwarn #endif abi_suffix.hpp000444000765000024 115612161110610 23772 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // abi_suffix.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #if defined( __BORLANDC__ ) #pragma nopushoptwarn #endif archive_serializer_map.hpp000444000765000024 327712161110665 26402 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_SERIALIZER_MAP_HPP #define BOOST_ARCHIVE_SERIALIZER_MAP_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // archive_serializer_map.hpp: extenstion of type_info required for // serialization. // (C) Copyright 2009 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // note: this is nothing more than the thinest of wrappers around // basic_serializer_map so we can have a one map / archive type. #include #include #include // must be the last header namespace boost { namespace serialization { class extended_type_info; } // namespace serialization namespace archive { namespace detail { class basic_serializer; template class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) archive_serializer_map { public: static bool insert(const basic_serializer * bs); static void erase(const basic_serializer * bs); static const basic_serializer * find( const boost::serialization::extended_type_info & type_ ); }; } // namespace detail } // namespace archive } // namespace boost #include // must be the last header #endif //BOOST_ARCHIVE_SERIALIZER_MAP_HPP auto_link_archive.hpp000444000765000024 333712161110702 25346 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // auto_link_archive.hpp // // (c) Copyright Robert Ramey 2004 // Use, modification, and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See library home page at http://www.boost.org/libs/serialization //----------------------------------------------------------------------------// // This header implements separate compilation features as described in // http://www.boost.org/more/separate_compilation.html // enable automatic library variant selection ------------------------------// #include #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB) \ && !defined(BOOST_ARCHIVE_SOURCE) && !defined(BOOST_WARCHIVE_SOURCE) \ && !defined(BOOST_SERIALIZATION_SOURCE) // Set the name of our library, this will get undef'ed by auto_link.hpp // once it's done with it: // #define BOOST_LIB_NAME boost_serialization // // If we're importing code from a dll, then tell auto_link.hpp about it: // #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK) # define BOOST_DYN_LINK #endif // // And include the header that does the work: // #include #endif // auto-linking disabled #endif // BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP auto_link_warchive.hpp000444000765000024 312512161110653 25535 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // auto_link_warchive.hpp // // (c) Copyright Robert Ramey 2004 // Use, modification, and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See library home page at http://www.boost.org/libs/serialization //----------------------------------------------------------------------------// // This header implements separate compilation features as described in // http://www.boost.org/more/separate_compilation.html // enable automatic library variant selection ------------------------------// #include #if !defined(BOOST_WARCHIVE_SOURCE) \ && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB) // Set the name of our library, this will get undef'ed by auto_link.hpp // once it's done with it: // #define BOOST_LIB_NAME boost_wserialization // // If we're importing code from a dll, then tell auto_link.hpp about it: // #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK) # define BOOST_DYN_LINK #endif // // And include the header that does the work: // #include #endif // auto-linking disabled #endif // ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP basic_iarchive.hpp000444000765000024 712612161110612 24613 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_iarchive.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // can't use this - much as I'd like to as borland doesn't support it // #include #include #include #include #include #include #include #include // must be the last header namespace boost { namespace serialization { class extended_type_info; } // namespace serialization namespace archive { namespace detail { class basic_iarchive_impl; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iserializer; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer; ////////////////////////////////////////////////////////////////////// // class basic_iarchive - read serialized objects from a input stream class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive : private boost::noncopyable { friend class basic_iarchive_impl; // hide implementation of this class to minimize header conclusion // in client code. I couldn't used scoped pointer with borland // boost::scoped_ptr pimpl; basic_iarchive_impl * pimpl; virtual void vload(version_type &t) = 0; virtual void vload(object_id_type &t) = 0; virtual void vload(class_id_type &t) = 0; virtual void vload(class_id_optional_type &t) = 0; virtual void vload(class_name_type &t) = 0; virtual void vload(tracking_type &t) = 0; protected: basic_iarchive(unsigned int flags); // account for bogus gcc warning #if defined(__GNUC__) virtual #endif ~basic_iarchive(); public: // note: NOT part of the public API. void next_object_pointer(void *t); void register_basic_serializer( const basic_iserializer & bis ); void load_object( void *t, const basic_iserializer & bis ); const basic_pointer_iserializer * load_pointer( void * & t, const basic_pointer_iserializer * bpis_ptr, const basic_pointer_iserializer * (*finder)( const boost::serialization::extended_type_info & eti ) ); // real public API starts here void set_library_version(library_version_type archive_library_version); library_version_type get_library_version() const; unsigned int get_flags() const; void reset_object_address(const void * new_address, const void * old_address); void delete_created_pointers(); }; } // namespace detail } // namespace archive } // namespace boost // required by smart_cast for compilers not implementing // partial template specialization BOOST_TT_BROKEN_COMPILER_SPEC( boost::archive::detail::basic_iarchive ) #include // pops abi_suffix.hpp pragmas #endif //BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP basic_iserializer.hpp000444000765000024 560712161110647 25355 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP #define BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_iserializer.hpp: extenstion of type_info required for serialization. // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // NULL #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace serialization { class extended_type_info; } // namespace serialization // forward declarations namespace archive { namespace detail { class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iserializer : public basic_serializer { private: basic_pointer_iserializer *m_bpis; protected: explicit basic_iserializer( const boost::serialization::extended_type_info & type ); // account for bogus gcc warning #if defined(__GNUC__) virtual #endif ~basic_iserializer(); public: bool serialized_as_pointer() const { return m_bpis != NULL; } void set_bpis(basic_pointer_iserializer *bpis){ m_bpis = bpis; } const basic_pointer_iserializer * get_bpis_ptr() const { return m_bpis; } virtual void load_object_data( basic_iarchive & ar, void *x, const unsigned int file_version ) const = 0; // returns true if class_info should be saved virtual bool class_info() const = 0 ; // returns true if objects should be tracked virtual bool tracking(const unsigned int) const = 0 ; // returns class version virtual version_type version() const = 0 ; // returns true if this class is polymorphic virtual bool is_polymorphic() const = 0; virtual void destroy(/*const*/ void *address) const = 0 ; }; } // namespae detail } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP basic_oarchive.hpp000444000765000024 703512161110664 24627 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_BASIC_OARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_oarchive.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // NULL #include #include #include // can't use this - much as I'd like to as borland doesn't support it // #include #include #include #include // must be the last header namespace boost { namespace serialization { class extended_type_info; } // namespace serialization namespace archive { namespace detail { class basic_oarchive_impl; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer; ////////////////////////////////////////////////////////////////////// // class basic_oarchive - write serialized objects to an output stream class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive : private boost::noncopyable { friend class basic_oarchive_impl; // hide implementation of this class to minimize header conclusion // in client code. note: borland can't use scoped_ptr //boost::scoped_ptr pimpl; basic_oarchive_impl * pimpl; // overload these to bracket object attributes. Used to implement // xml archives virtual void vsave(const version_type t) = 0; virtual void vsave(const object_id_type t) = 0; virtual void vsave(const object_reference_type t) = 0; virtual void vsave(const class_id_type t) = 0; virtual void vsave(const class_id_optional_type t) = 0; virtual void vsave(const class_id_reference_type t) = 0; virtual void vsave(const class_name_type & t) = 0; virtual void vsave(const tracking_type t) = 0; protected: basic_oarchive(unsigned int flags = 0); // account for bogus gcc warning #if defined(__GNUC__) virtual #endif ~basic_oarchive(); public: // note: NOT part of the public interface void register_basic_serializer( const basic_oserializer & bos ); void save_object( const void *x, const basic_oserializer & bos ); void save_pointer( const void * t, const basic_pointer_oserializer * bpos_ptr ); void save_null_pointer(){ vsave(NULL_POINTER_TAG); } // real public interface starts here void end_preamble(); // default implementation does nothing library_version_type get_library_version() const; unsigned int get_flags() const; }; } // namespace detail } // namespace archive } // namespace boost // required by smart_cast for compilers not implementing // partial template specialization BOOST_TT_BROKEN_COMPILER_SPEC( boost::archive::detail::basic_oarchive ) #include // pops abi_suffix.hpp pragmas #endif //BOOST_ARCHIVE_BASIC_OARCHIVE_HPP basic_oserializer.hpp000444000765000024 543112161110671 25353 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP #define BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_oserializer.hpp: extenstion of type_info required for serialization. // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // NULL #include #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace serialization { class extended_type_info; } // namespace serialization // forward declarations namespace archive { namespace detail { class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer : public basic_serializer { private: basic_pointer_oserializer *m_bpos; protected: explicit basic_oserializer( const boost::serialization::extended_type_info & type_ ); // account for bogus gcc warning #if defined(__GNUC__) virtual #endif ~basic_oserializer(); public: bool serialized_as_pointer() const { return m_bpos != NULL; } void set_bpos(basic_pointer_oserializer *bpos){ m_bpos = bpos; } const basic_pointer_oserializer * get_bpos() const { return m_bpos; } virtual void save_object_data( basic_oarchive & ar, const void * x ) const = 0; // returns true if class_info should be saved virtual bool class_info() const = 0; // returns true if objects should be tracked virtual bool tracking(const unsigned int flags) const = 0; // returns class version virtual version_type version() const = 0; // returns true if this class is polymorphic virtual bool is_polymorphic() const = 0; }; } // namespace detail } // namespace serialization } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP basic_pointer_iserializer.hpp000444000765000024 426512161110645 27112 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP #define BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_pointer_oserializer.hpp: extenstion of type_info required for // serialization. // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace serialization { class extended_type_info; } // namespace serialization // forward declarations namespace archive { namespace detail { class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iserializer; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer : public basic_serializer { protected: explicit basic_pointer_iserializer( const boost::serialization::extended_type_info & type_ ); // account for bogus gcc warning #if defined(__GNUC__) virtual #endif ~basic_pointer_iserializer(); public: virtual const basic_iserializer & get_basic_serializer() const = 0; virtual void load_object_ptr( basic_iarchive & ar, void * & x, const unsigned int file_version ) const = 0; }; } // namespace detail } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP basic_pointer_oserializer.hpp000444000765000024 416612161110675 27123 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP #define BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_pointer_oserializer.hpp: extenstion of type_info required for // serialization. // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include // must be the last header #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace serialization { class extended_type_info; } // namespace serialization namespace archive { namespace detail { class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer; class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer : public basic_serializer { protected: explicit basic_pointer_oserializer( const boost::serialization::extended_type_info & type_ ); public: // account for bogus gcc warning #if defined(__GNUC__) virtual #endif ~basic_pointer_oserializer(); virtual const basic_oserializer & get_basic_serializer() const = 0; virtual void save_object_ptr( basic_oarchive & ar, const void * x ) const = 0; }; } // namespace detail } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP basic_serializer.hpp000444000765000024 437612161110667 25210 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_BASIC_SERIALIZER_HPP #define BOOST_ARCHIVE_BASIC_SERIALIZER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_serializer.hpp: extenstion of type_info required for serialization. // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // NULL #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { namespace detail { class basic_serializer : private boost::noncopyable { const boost::serialization::extended_type_info * m_eti; protected: explicit basic_serializer( const boost::serialization::extended_type_info & eti ) : m_eti(& eti) { BOOST_ASSERT(NULL != & eti); } public: inline bool operator<(const basic_serializer & rhs) const { // can't compare address since there can be multiple eti records // for the same type in different execution modules (that is, DLLS) // leave this here as a reminder not to do this! // return & lhs.get_eti() < & rhs.get_eti(); return get_eti() < rhs.get_eti(); } const char * get_debug_info() const { return m_eti->get_debug_info(); } const boost::serialization::extended_type_info & get_eti() const { return * m_eti; } }; class basic_serializer_arg : public basic_serializer { public: basic_serializer_arg(const serialization::extended_type_info & eti) : basic_serializer(eti) {} }; } // namespace detail } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_BASIC_SERIALIZER_HPP basic_serializer_map.hpp000444000765000024 370312161110642 26027 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_SERIALIZER_MAP_HPP #define BOOST_SERIALIZER_MAP_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_serializer_map.hpp: extenstion of type_info required for serialization. // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include // must be the last header namespace boost { namespace serialization { class extended_type_info; } namespace archive { namespace detail { class basic_serializer; class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_serializer_map : public boost::noncopyable { struct type_info_pointer_compare { bool operator()( const basic_serializer * lhs, const basic_serializer * rhs ) const ; }; typedef std::set< const basic_serializer *, type_info_pointer_compare > map_type; map_type m_map; public: bool insert(const basic_serializer * bs); void erase(const basic_serializer * bs); const basic_serializer * find( const boost::serialization::extended_type_info & type_ ) const; private: // cw 8.3 requires this basic_serializer_map& operator=(basic_serializer_map const&); }; } // namespace detail } // namespace archive } // namespace boost #include // must be the last header #endif // BOOST_SERIALIZER_MAP_HPP check.hpp000444000765000024 1323012161110621 22746 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_CHECK_HPP #define BOOST_ARCHIVE_DETAIL_CHECK_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #pragma inline_depth(511) #pragma inline_recursion(on) #endif #if defined(__MWERKS__) #pragma inline_depth(511) #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // check.hpp: interface for serialization system. // (C) Copyright 2009 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace archive { namespace detail { // checks for objects template inline void check_object_level(){ typedef BOOST_DEDUCED_TYPENAME mpl::greater_equal< serialization::implementation_level< T >, mpl::int_ >::type typex; // trap attempts to serialize objects marked // not_serializable BOOST_STATIC_ASSERT(typex::value); } template inline void check_object_versioning(){ typedef BOOST_DEDUCED_TYPENAME mpl::or_< BOOST_DEDUCED_TYPENAME mpl::greater< serialization::implementation_level< T >, mpl::int_ >, BOOST_DEDUCED_TYPENAME mpl::equal_to< serialization::version< T >, mpl::int_<0> > > typex; // trap attempts to serialize with objects that don't // save class information in the archive with versioning. BOOST_STATIC_ASSERT(typex::value); } template inline void check_object_tracking(){ // presume it has already been determined that // T is not a const BOOST_STATIC_ASSERT(! boost::is_const< T >::value); typedef BOOST_DEDUCED_TYPENAME mpl::equal_to< serialization::tracking_level< T >, mpl::int_ >::type typex; // saving an non-const object of a type not marked "track_never) // may be an indicator of an error usage of the // serialization library and should be double checked. // See documentation on object tracking. Also, see the // "rationale" section of the documenation // for motivation for this checking. BOOST_STATIC_WARNING(typex::value); } // checks for pointers template inline void check_pointer_level(){ // we should only invoke this once we KNOW that T // has been used as a pointer!! typedef BOOST_DEDUCED_TYPENAME mpl::or_< BOOST_DEDUCED_TYPENAME mpl::greater< serialization::implementation_level< T >, mpl::int_ >, BOOST_DEDUCED_TYPENAME mpl::not_< BOOST_DEDUCED_TYPENAME mpl::equal_to< serialization::tracking_level< T >, mpl::int_ > > > typex; // Address the following when serializing to a pointer: // a) This type doesn't save class information in the // archive. That is, the serialization trait implementation // level <= object_serializable. // b) Tracking for this type is set to "track selectively" // in this case, indication that an object is tracked is // not stored in the archive itself - see level == object_serializable // but rather the existence of the operation ar >> T * is used to // infer that an object of this type should be tracked. So, if // you save via a pointer but don't load via a pointer the operation // will fail on load without given any valid reason for the failure. // So if your program traps here, consider changing the // tracking or implementation level traits - or not // serializing via a pointer. BOOST_STATIC_WARNING(typex::value); } template void inline check_pointer_tracking(){ typedef BOOST_DEDUCED_TYPENAME mpl::greater< serialization::tracking_level< T >, mpl::int_ >::type typex; // serializing an object of a type marked "track_never" through a pointer // could result in creating more objects than were saved! BOOST_STATIC_WARNING(typex::value); } template inline void check_const_loading(){ typedef BOOST_DEDUCED_TYPENAME mpl::or_< BOOST_DEDUCED_TYPENAME boost::serialization::is_wrapper< T >, BOOST_DEDUCED_TYPENAME mpl::not_< BOOST_DEDUCED_TYPENAME boost::is_const< T > > >::type typex; // cannot load data into a "const" object unless it's a // wrapper around some other non-const object. BOOST_STATIC_ASSERT(typex::value); } } // detail } // archive } // boost #endif // BOOST_ARCHIVE_DETAIL_CHECK_HPP common_iarchive.hpp000444000765000024 475612161110701 25027 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // common_iarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { namespace detail { class extended_type_info; // note: referred to as Curiously Recurring Template Patter (CRTP) template class common_iarchive : public basic_iarchive, public interface_iarchive { friend class interface_iarchive; private: virtual void vload(version_type & t){ * this->This() >> t; } virtual void vload(object_id_type & t){ * this->This() >> t; } virtual void vload(class_id_type & t){ * this->This() >> t; } virtual void vload(class_id_optional_type & t){ * this->This() >> t; } virtual void vload(tracking_type & t){ * this->This() >> t; } virtual void vload(class_name_type &s){ * this->This() >> s; } protected: // default processing - invoke serialization library template void load_override(T & t, BOOST_PFTO int){ archive::load(* this->This(), t); } // default implementations of functions which emit start/end tags for // archive types that require them. void load_start(const char * /*name*/){} void load_end(const char * /*name*/){} // default archive initialization common_iarchive(unsigned int flags = 0) : basic_iarchive(flags), interface_iarchive() {} }; } // namespace detail } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP common_oarchive.hpp000444000765000024 471312161110637 25036 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // common_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace boost { namespace archive { namespace detail { // note: referred to as Curiously Recurring Template Patter (CRTP) template class common_oarchive : public basic_oarchive, public interface_oarchive { friend class interface_oarchive; private: virtual void vsave(const version_type t){ * this->This() << t; } virtual void vsave(const object_id_type t){ * this->This() << t; } virtual void vsave(const object_reference_type t){ * this->This() << t; } virtual void vsave(const class_id_type t){ * this->This() << t; } virtual void vsave(const class_id_reference_type t){ * this->This() << t; } virtual void vsave(const class_id_optional_type t){ * this->This() << t; } virtual void vsave(const class_name_type & t){ * this->This() << t; } virtual void vsave(const tracking_type t){ * this->This() << t; } protected: // default processing - invoke serialization library template void save_override(T & t, BOOST_PFTO int){ archive::save(* this->This(), t); } void save_start(const char * /*name*/){} void save_end(const char * /*name*/){} common_oarchive(unsigned int flags = 0) : basic_oarchive(flags), interface_oarchive() {} }; } // namespace detail } // namespace archive } // namespace boost #ifdef BOOST_MSVC #pragma warning(pop) #endif #endif // BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP decl.hpp000444000765000024 556312161110670 22576 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_DECL_HPP #define BOOST_ARCHIVE_DETAIL_DECL_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2///////// 3/////////4/////////5/////////6/////////7/////////8 // decl.hpp // // (c) Copyright Robert Ramey 2004 // Use, modification, and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See library home page at http://www.boost.org/libs/serialization //----------------------------------------------------------------------------// // This header implements separate compilation features as described in // http://www.boost.org/more/separate_compilation.html #include #include #if defined(BOOST_HAS_DECLSPEC) #if (defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)) #if defined(BOOST_ARCHIVE_SOURCE) #if defined(__BORLANDC__) #define BOOST_ARCHIVE_DECL(T) T __export #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) T __export #else #define BOOST_ARCHIVE_DECL(T) __declspec(dllexport) T #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) __declspec(dllexport) T #endif #else #if defined(__BORLANDC__) #define BOOST_ARCHIVE_DECL(T) T __import #else #define BOOST_ARCHIVE_DECL(T) __declspec(dllimport) T #endif #endif #if defined(BOOST_WARCHIVE_SOURCE) #if defined(__BORLANDC__) #define BOOST_WARCHIVE_DECL(T) T __export #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) T __export #else #define BOOST_WARCHIVE_DECL(T) __declspec(dllexport) T #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) __declspec(dllexport) T #endif #else #if defined(__BORLANDC__) #define BOOST_WARCHIVE_DECL(T) T __import #else #define BOOST_WARCHIVE_DECL(T) __declspec(dllimport) T #endif #endif #if !defined(BOOST_WARCHIVE_SOURCE) && !defined(BOOST_ARCHIVE_SOURCE) #if defined(__BORLANDC__) #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) T __import #else #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) __declspec(dllimport) T #endif #endif #endif #endif // BOOST_HAS_DECLSPEC #if ! defined(BOOST_ARCHIVE_DECL) #define BOOST_ARCHIVE_DECL(T) T #endif #if ! defined(BOOST_WARCHIVE_DECL) #define BOOST_WARCHIVE_DECL(T) T #endif #if ! defined(BOOST_ARCHIVE_OR_WARCHIVE_DECL) #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) T #endif #endif // BOOST_ARCHIVE_DETAIL_DECL_HPP interface_iarchive.hpp000444000765000024 456312161110654 25502 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // interface_iarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // NULL #include #include #include #include #include #include // must be the last header namespace boost { namespace archive { namespace detail { class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer; template class interface_iarchive { protected: interface_iarchive(){}; public: ///////////////////////////////////////////////////////// // archive public interface typedef mpl::bool_ is_loading; typedef mpl::bool_ is_saving; // return a pointer to the most derived class Archive * This(){ return static_cast(this); } template const basic_pointer_iserializer * register_type(T * = NULL){ const basic_pointer_iserializer & bpis = boost::serialization::singleton< pointer_iserializer >::get_const_instance(); this->This()->register_basic_serializer(bpis.get_basic_serializer()); return & bpis; } template Archive & operator>>(T & t){ this->This()->load_override(t, 0); return * this->This(); } // the & operator template Archive & operator&(T & t){ return *(this->This()) >> t; } }; } // namespace detail } // namespace archive } // namespace boost #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP interface_oarchive.hpp000444000765000024 503112161110653 25476 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP #define BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // interface_oarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // NULL #include #include #include #include #include // must be the last header #include namespace boost { namespace archive { namespace detail { class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer; template class interface_oarchive { protected: interface_oarchive(){}; public: ///////////////////////////////////////////////////////// // archive public interface typedef mpl::bool_ is_loading; typedef mpl::bool_ is_saving; // return a pointer to the most derived class Archive * This(){ return static_cast(this); } template const basic_pointer_oserializer * register_type(const T * = NULL){ const basic_pointer_oserializer & bpos = boost::serialization::singleton< pointer_oserializer >::get_const_instance(); this->This()->register_basic_serializer(bpos.get_basic_serializer()); return & bpos; } template Archive & operator<<(T & t){ this->This()->save_override(t, 0); return * this->This(); } // the & operator template Archive & operator&(T & t){ #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING return * this->This() << const_cast(t); #else return * this->This() << t; #endif } }; } // namespace detail } // namespace archive } // namespace boost #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP iserializer.hpp000444000765000024 5054612161110646 24235 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP #define BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #pragma inline_depth(511) #pragma inline_recursion(on) #endif #if defined(__MWERKS__) #pragma inline_depth(511) #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // iserializer.hpp: interface for serialization system. // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // for placement new #include // for auto_ptr #include // size_t, NULL #include #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include #include #ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO #include #endif #include #include #include #include #include #include #include #include #include #include #define DONT_USE_HAS_NEW_OPERATOR ( \ defined(__BORLANDC__) \ || BOOST_WORKAROUND(__IBMCPP__, < 1210) \ || defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) \ || defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590) \ ) #if ! DONT_USE_HAS_NEW_OPERATOR #include #endif #include #include #include #include #include #include #include #include #include #include #include // the following is need only for dynamic cast of polymorphic pointers #include #include #include #include #include #include namespace boost { namespace serialization { class extended_type_info; } // namespace serialization namespace archive { // an accessor to permit friend access to archives. Needed because // some compilers don't handle friend templates completely class load_access { public: template static void load_primitive(Archive &ar, T &t){ ar.load(t); } }; namespace detail { #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif template class iserializer : public basic_iserializer { private: virtual void destroy(/*const*/ void *address) const { boost::serialization::access::destroy(static_cast(address)); } protected: // protected constructor since it's always created by singleton explicit iserializer() : basic_iserializer( boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type >::get_const_instance() ) {} public: virtual BOOST_DLLEXPORT void load_object_data( basic_iarchive & ar, void *x, const unsigned int file_version ) const BOOST_USED; virtual bool class_info() const { return boost::serialization::implementation_level< T >::value >= boost::serialization::object_class_info; } virtual bool tracking(const unsigned int /* flags */) const { return boost::serialization::tracking_level< T >::value == boost::serialization::track_always || ( boost::serialization::tracking_level< T >::value == boost::serialization::track_selectively && serialized_as_pointer()); } virtual version_type version() const { return version_type(::boost::serialization::version< T >::value); } virtual bool is_polymorphic() const { return boost::is_polymorphic< T >::value; } virtual ~iserializer(){}; }; #ifdef BOOST_MSVC # pragma warning(pop) #endif template BOOST_DLLEXPORT void iserializer::load_object_data( basic_iarchive & ar, void *x, const unsigned int file_version ) const { // note: we now comment this out. Before we permited archive // version # to be very large. Now we don't. To permit // readers of these old archives, we have to suppress this // code. Perhaps in the future we might re-enable it but // permit its suppression with a runtime switch. #if 0 // trap case where the program cannot handle the current version if(file_version > static_cast(version())) boost::serialization::throw_exception( archive::archive_exception( boost::archive::archive_exception::unsupported_class_version, get_debug_info() ) ); #endif // make sure call is routed through the higest interface that might // be specialized by the user. boost::serialization::serialize_adl( boost::serialization::smart_cast_reference(ar), * static_cast(x), file_version ); } #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif template class pointer_iserializer : public basic_pointer_iserializer { private: virtual const basic_iserializer & get_basic_serializer() const { return boost::serialization::singleton< iserializer >::get_const_instance(); } BOOST_DLLEXPORT virtual void load_object_ptr( basic_iarchive & ar, void * & x, const unsigned int file_version ) const BOOST_USED; protected: // this should alway be a singleton so make the constructor protected pointer_iserializer(); ~pointer_iserializer(); }; #ifdef BOOST_MSVC # pragma warning(pop) #endif // note trick to be sure that operator new is using class specific // version if such exists. Due to Peter Dimov. // note: the following fails if T has no default constructor. // otherwise it would have been ideal //struct heap_allocator : public T //{ // T * invoke(){ // return ::new(sizeof(T)); // } //} template struct heap_allocator { // boost::has_new_operator< T > doesn't work on these compilers #if DONT_USE_HAS_NEW_OPERATOR // This doesn't handle operator new overload for class T static T * invoke(){ return static_cast(operator new(sizeof(T))); } #else struct has_new_operator { static T* invoke() { return static_cast((T::operator new)(sizeof(T))); } }; struct doesnt_have_new_operator { static T* invoke() { return static_cast(operator new(sizeof(T))); } }; static T * invoke() { typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< boost::has_new_operator< T >, mpl::identity, mpl::identity >::type typex; return typex::invoke(); } #endif }; // due to Martin Ecker template class auto_ptr_with_deleter { public: explicit auto_ptr_with_deleter(T* p) : m_p(p) {} ~auto_ptr_with_deleter(){ if (m_p) boost::serialization::access::destroy(m_p); } T* get() const { return m_p; } T* release() { T* p = m_p; m_p = NULL; return p; } private: T* m_p; }; // note: BOOST_DLLEXPORT is so that code for polymorphic class // serialized only through base class won't get optimized out template BOOST_DLLEXPORT void pointer_iserializer::load_object_ptr( basic_iarchive & ar, void * & x, const unsigned int file_version ) const { Archive & ar_impl = boost::serialization::smart_cast_reference(ar); auto_ptr_with_deleter< T > ap(heap_allocator< T >::invoke()); if(NULL == ap.get()) boost::serialization::throw_exception(std::bad_alloc()) ; T * t = ap.get(); x = t; // catch exception during load_construct_data so that we don't // automatically delete the t which is most likely not fully // constructed BOOST_TRY { // this addresses an obscure situtation that occurs when // load_constructor de-serializes something through a pointer. ar.next_object_pointer(t); boost::serialization::load_construct_data_adl( ar_impl, t, file_version ); } BOOST_CATCH(...){ ap.release(); BOOST_RETHROW; } BOOST_CATCH_END ar_impl >> boost::serialization::make_nvp(NULL, * t); ap.release(); } template pointer_iserializer::pointer_iserializer() : basic_pointer_iserializer( boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type >::get_const_instance() ) { boost::serialization::singleton< iserializer >::get_mutable_instance().set_bpis(this); archive_serializer_map::insert(this); } template pointer_iserializer::~pointer_iserializer(){ archive_serializer_map::erase(this); } template struct load_non_pointer_type { // note this bounces the call right back to the archive // with no runtime overhead struct load_primitive { template static void invoke(Archive & ar, T & t){ load_access::load_primitive(ar, t); } }; // note this bounces the call right back to the archive // with no runtime overhead struct load_only { template static void invoke(Archive & ar, const T & t){ // short cut to user's serializer // make sure call is routed through the higest interface that might // be specialized by the user. boost::serialization::serialize_adl( ar, const_cast(t), boost::serialization::version< T >::value ); } }; // note this save class information including version // and serialization level to the archive struct load_standard { template static void invoke(Archive &ar, const T & t){ void * x = & const_cast(t); ar.load_object( x, boost::serialization::singleton< iserializer >::get_const_instance() ); } }; struct load_conditional { template static void invoke(Archive &ar, T &t){ //if(0 == (ar.get_flags() & no_tracking)) load_standard::invoke(ar, t); //else // load_only::invoke(ar, t); } }; template static void invoke(Archive & ar, T &t){ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< // if its primitive mpl::equal_to< boost::serialization::implementation_level< T >, mpl::int_ >, mpl::identity, // else BOOST_DEDUCED_TYPENAME mpl::eval_if< // class info / version mpl::greater_equal< boost::serialization::implementation_level< T >, mpl::int_ >, // do standard load mpl::identity, // else BOOST_DEDUCED_TYPENAME mpl::eval_if< // no tracking mpl::equal_to< boost::serialization::tracking_level< T >, mpl::int_ >, // do a fast load mpl::identity, // else // do a fast load only tracking is turned off mpl::identity > > >::type typex; check_object_versioning< T >(); check_object_level< T >(); typex::invoke(ar, t); } }; template struct load_pointer_type { struct abstract { template static const basic_pointer_iserializer * register_type(Archive & /* ar */){ // it has? to be polymorphic BOOST_STATIC_ASSERT(boost::is_polymorphic< T >::value); return static_cast(NULL); } }; struct non_abstract { template static const basic_pointer_iserializer * register_type(Archive & ar){ return ar.register_type(static_cast(NULL)); } }; template static const basic_pointer_iserializer * register_type(Archive &ar, const T & /*t*/){ // there should never be any need to load an abstract polymorphic // class pointer. Inhibiting code generation for this // permits abstract base classes to be used - note: exception // virtual serialize functions used for plug-ins typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< boost::serialization::is_abstract, boost::mpl::identity, boost::mpl::identity >::type typex; return typex::template register_type< T >(ar); } template static T * pointer_tweak( const boost::serialization::extended_type_info & eti, void const * const t, const T & ) { // tweak the pointer back to the base class return static_cast( const_cast( boost::serialization::void_upcast( eti, boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type >::get_const_instance(), t ) ) ); } template static void check_load(T & /* t */){ check_pointer_level< T >(); check_pointer_tracking< T >(); } static const basic_pointer_iserializer * find(const boost::serialization::extended_type_info & type){ return static_cast( archive_serializer_map::find(type) ); } template static void invoke(Archive & ar, Tptr & t){ check_load(*t); const basic_pointer_iserializer * bpis_ptr = register_type(ar, *t); const basic_pointer_iserializer * newbpis_ptr = ar.load_pointer( // note major hack here !!! // I tried every way to convert Tptr &t (where Tptr might // include const) to void * &. This is the only way // I could make it work. RR (void * & )t, bpis_ptr, find ); // if the pointer isn't that of the base class if(newbpis_ptr != bpis_ptr){ t = pointer_tweak(newbpis_ptr->get_eti(), t, *t); } } }; template struct load_enum_type { template static void invoke(Archive &ar, T &t){ // convert integers to correct enum to load int i; ar >> boost::serialization::make_nvp(NULL, i); t = static_cast< T >(i); } }; template struct load_array_type { template static void invoke(Archive &ar, T &t){ typedef BOOST_DEDUCED_TYPENAME remove_extent< T >::type value_type; // convert integers to correct enum to load // determine number of elements in the array. Consider the // fact that some machines will align elements on boundries // other than characters. std::size_t current_count = sizeof(t) / ( static_cast(static_cast(&t[1])) - static_cast(static_cast(&t[0])) ); boost::serialization::collection_size_type count; ar >> BOOST_SERIALIZATION_NVP(count); if(static_cast(count) > current_count) boost::serialization::throw_exception( archive::archive_exception( boost::archive::archive_exception::array_size_too_short ) ); ar >> serialization::make_array(static_cast(&t[0]),count); } }; } // detail template inline void load(Archive & ar, T &t){ // if this assertion trips. It means we're trying to load a // const object with a compiler that doesn't have correct // funtion template ordering. On other compilers, this is // handled below. detail::check_const_loading< T >(); typedef BOOST_DEDUCED_TYPENAME mpl::eval_if, mpl::identity > ,//else BOOST_DEDUCED_TYPENAME mpl::eval_if, mpl::identity > ,//else BOOST_DEDUCED_TYPENAME mpl::eval_if, mpl::identity > ,//else mpl::identity > > > >::type typex; typex::invoke(ar, t); } #if 0 // BORLAND #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560)) // borland has a couple of problems // a) if function is partially specialized - see below // const paramters are transformed to non-const ones // b) implementation of base_object can't be made to work // correctly which results in all base_object s being const. // So, strip off the const for borland. This breaks the trap // for loading const objects - but I see no alternative template inline void load(Archive &ar, const T & t){ load(ar, const_cast(t)); } #endif // let wrappers through. #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING template inline void load_wrapper(Archive &ar, const T&t, mpl::true_){ boost::archive::load(ar, const_cast(t)); } #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560)) template inline void load(Archive &ar, const T&t){ load_wrapper(ar,t,serialization::is_wrapper< T >()); } #endif #endif #endif } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP oserializer.hpp000444000765000024 4312512161110621 24227 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail#ifndef BOOST_ARCHIVE_OSERIALIZER_HPP #define BOOST_ARCHIVE_OSERIALIZER_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #pragma inline_depth(511) #pragma inline_recursion(on) #endif #if defined(__MWERKS__) #pragma inline_depth(511) #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // oserializer.hpp: interface for serialization system. // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // NULL #include #include #include #include #include #include #include #ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO #include #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 namespace boost { namespace serialization { class extended_type_info; } // namespace serialization namespace archive { // an accessor to permit friend access to archives. Needed because // some compilers don't handle friend templates completely class save_access { public: template static void end_preamble(Archive & ar){ ar.end_preamble(); } template static void save_primitive(Archive & ar, const T & t){ ar.end_preamble(); ar.save(t); } }; namespace detail { #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif template class oserializer : public basic_oserializer { private: // private constructor to inhibit any existence other than the // static one public: explicit BOOST_DLLEXPORT oserializer() : basic_oserializer( boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type >::get_const_instance() ) {} virtual BOOST_DLLEXPORT void save_object_data( basic_oarchive & ar, const void *x ) const BOOST_USED; virtual bool class_info() const { return boost::serialization::implementation_level< T >::value >= boost::serialization::object_class_info; } virtual bool tracking(const unsigned int /* flags */) const { return boost::serialization::tracking_level< T >::value == boost::serialization::track_always || (boost::serialization::tracking_level< T >::value == boost::serialization::track_selectively && serialized_as_pointer()); } virtual version_type version() const { return version_type(::boost::serialization::version< T >::value); } virtual bool is_polymorphic() const { return boost::is_polymorphic< T >::value; } virtual ~oserializer(){} }; #ifdef BOOST_MSVC # pragma warning(pop) #endif template BOOST_DLLEXPORT void oserializer::save_object_data( basic_oarchive & ar, const void *x ) const { // make sure call is routed through the highest interface that might // be specialized by the user. BOOST_STATIC_ASSERT(boost::is_const< T >::value == false); boost::serialization::serialize_adl( boost::serialization::smart_cast_reference(ar), * static_cast(const_cast(x)), version() ); } #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif template class pointer_oserializer : public basic_pointer_oserializer { private: const basic_oserializer & get_basic_serializer() const { return boost::serialization::singleton< oserializer >::get_const_instance(); } virtual BOOST_DLLEXPORT void save_object_ptr( basic_oarchive & ar, const void * x ) const BOOST_USED; public: pointer_oserializer(); ~pointer_oserializer(); }; #ifdef BOOST_MSVC # pragma warning(pop) #endif template BOOST_DLLEXPORT void pointer_oserializer::save_object_ptr( basic_oarchive & ar, const void * x ) const { BOOST_ASSERT(NULL != x); // make sure call is routed through the highest interface that might // be specialized by the user. T * t = static_cast(const_cast(x)); const unsigned int file_version = boost::serialization::version< T >::value; Archive & ar_impl = boost::serialization::smart_cast_reference(ar); boost::serialization::save_construct_data_adl( ar_impl, t, file_version ); ar_impl << boost::serialization::make_nvp(NULL, * t); } template pointer_oserializer::pointer_oserializer() : basic_pointer_oserializer( boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type >::get_const_instance() ) { // make sure appropriate member function is instantiated boost::serialization::singleton< oserializer >::get_mutable_instance().set_bpos(this); archive_serializer_map::insert(this); } template pointer_oserializer::~pointer_oserializer(){ archive_serializer_map::erase(this); } template struct save_non_pointer_type { // note this bounces the call right back to the archive // with no runtime overhead struct save_primitive { template static void invoke(Archive & ar, const T & t){ save_access::save_primitive(ar, t); } }; // same as above but passes through serialization struct save_only { template static void invoke(Archive & ar, const T & t){ // make sure call is routed through the highest interface that might // be specialized by the user. boost::serialization::serialize_adl( ar, const_cast(t), ::boost::serialization::version< T >::value ); } }; // adds class information to the archive. This includes // serialization level and class version struct save_standard { template static void invoke(Archive &ar, const T & t){ ar.save_object( & t, boost::serialization::singleton< oserializer >::get_const_instance() ); } }; // adds class information to the archive. This includes // serialization level and class version struct save_conditional { template static void invoke(Archive &ar, const T &t){ //if(0 == (ar.get_flags() & no_tracking)) save_standard::invoke(ar, t); //else // save_only::invoke(ar, t); } }; template static void invoke(Archive & ar, const T & t){ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< // if its primitive mpl::equal_to< boost::serialization::implementation_level< T >, mpl::int_ >, mpl::identity, // else BOOST_DEDUCED_TYPENAME mpl::eval_if< // class info / version mpl::greater_equal< boost::serialization::implementation_level< T >, mpl::int_ >, // do standard save mpl::identity, // else BOOST_DEDUCED_TYPENAME mpl::eval_if< // no tracking mpl::equal_to< boost::serialization::tracking_level< T >, mpl::int_ >, // do a fast save mpl::identity, // else // do a fast save only tracking is turned off mpl::identity > > >::type typex; check_object_versioning< T >(); typex::invoke(ar, t); } template static void invoke(Archive & ar, T & t){ check_object_level< T >(); check_object_tracking< T >(); invoke(ar, const_cast(t)); } }; template struct save_pointer_type { struct abstract { template static const basic_pointer_oserializer * register_type(Archive & /* ar */){ // it has? to be polymorphic BOOST_STATIC_ASSERT(boost::is_polymorphic< T >::value); return NULL; } }; struct non_abstract { template static const basic_pointer_oserializer * register_type(Archive & ar){ return ar.register_type(static_cast(NULL)); } }; template static const basic_pointer_oserializer * register_type(Archive &ar, T & /*t*/){ // there should never be any need to save an abstract polymorphic // class pointer. Inhibiting code generation for this // permits abstract base classes to be used - note: exception // virtual serialize functions used for plug-ins typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< boost::serialization::is_abstract< T >, mpl::identity, mpl::identity >::type typex; return typex::template register_type< T >(ar); } struct non_polymorphic { template static void save( Archive &ar, T & t ){ const basic_pointer_oserializer & bpos = boost::serialization::singleton< pointer_oserializer >::get_const_instance(); // save the requested pointer type ar.save_pointer(& t, & bpos); } }; struct polymorphic { template static void save( Archive &ar, T & t ){ BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type const & i = boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type >::get_const_instance(); boost::serialization::extended_type_info const * const this_type = & i; // retrieve the true type of the object pointed to // if this assertion fails its an error in this library BOOST_ASSERT(NULL != this_type); const boost::serialization::extended_type_info * true_type = i.get_derived_extended_type_info(t); // note:if this exception is thrown, be sure that derived pointer // is either registered or exported. if(NULL == true_type){ boost::serialization::throw_exception( archive_exception( archive_exception::unregistered_class, "derived class not registered or exported" ) ); } // if its not a pointer to a more derived type const void *vp = static_cast(&t); if(*this_type == *true_type){ const basic_pointer_oserializer * bpos = register_type(ar, t); ar.save_pointer(vp, bpos); return; } // convert pointer to more derived type. if this is thrown // it means that the base/derived relationship hasn't be registered vp = serialization::void_downcast( *true_type, *this_type, static_cast(&t) ); if(NULL == vp){ boost::serialization::throw_exception( archive_exception( archive_exception::unregistered_cast, true_type->get_debug_info(), this_type->get_debug_info() ) ); } // since true_type is valid, and this only gets made if the // pointer oserializer object has been created, this should never // fail const basic_pointer_oserializer * bpos = static_cast( boost::serialization::singleton< archive_serializer_map >::get_const_instance().find(*true_type) ); BOOST_ASSERT(NULL != bpos); if(NULL == bpos) boost::serialization::throw_exception( archive_exception( archive_exception::unregistered_class, "derived class not registered or exported" ) ); ar.save_pointer(vp, bpos); } }; template static void save( Archive & ar, const T & t ){ check_pointer_level< T >(); check_pointer_tracking< T >(); typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< is_polymorphic< T >, mpl::identity, mpl::identity >::type type; type::save(ar, const_cast(t)); } template static void invoke(Archive &ar, const TPtr t){ register_type(ar, * t); if(NULL == t){ basic_oarchive & boa = boost::serialization::smart_cast_reference(ar); boa.save_null_pointer(); save_access::end_preamble(ar); return; } save(ar, * t); } }; template struct save_enum_type { template static void invoke(Archive &ar, const T &t){ // convert enum to integers on save const int i = static_cast(t); ar << boost::serialization::make_nvp(NULL, i); } }; template struct save_array_type { template static void invoke(Archive &ar, const T &t){ typedef BOOST_DEDUCED_TYPENAME boost::remove_extent< T >::type value_type; save_access::end_preamble(ar); // consider alignment std::size_t c = sizeof(t) / ( static_cast(static_cast(&t[1])) - static_cast(static_cast(&t[0])) ); boost::serialization::collection_size_type count(c); ar << BOOST_SERIALIZATION_NVP(count); ar << serialization::make_array(static_cast(&t[0]),count); } }; } // detail template inline void save(Archive & ar, /*const*/ T &t){ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if, mpl::identity >, //else BOOST_DEDUCED_TYPENAME mpl::eval_if, mpl::identity >, //else BOOST_DEDUCED_TYPENAME mpl::eval_if, mpl::identity >, //else mpl::identity > > > >::type typex; typex::invoke(ar, t); } } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_OSERIALIZER_HPP register_archive.hpp000444000765000024 727012161110613 25206 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail// 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_ARCHIVE_DETAIL_REGISTER_ARCHIVE_DWA2006521_HPP # define BOOST_ARCHIVE_DETAIL_REGISTER_ARCHIVE_DWA2006521_HPP namespace boost { namespace archive { namespace detail { // No instantiate_ptr_serialization overloads generated by // BOOST_SERIALIZATION_REGISTER_ARCHIVE that lexically follow the call // will be seen *unless* they are in an associated namespace of one of // the arguments, so we pass one of these along to make sure this // namespace is considered. See temp.dep.candidate (14.6.4.2) in the // standard. struct adl_tag {}; template struct ptr_serialization_support; // We could've just used ptr_serialization_support, above, but using // it with only a forward declaration causes vc6/7 to complain about a // missing instantiate member, even if it has one. This is just a // friendly layer of indirection. template struct _ptr_serialization_support : ptr_serialization_support { typedef int type; }; #ifdef __SUNPRO_CC template struct counter : counter {}; template<> struct counter<0> {}; template void instantiate_ptr_serialization(Serializable* s, int, adl_tag) { instantiate_ptr_serialization(s, counter<20>()); } template struct get_counter { static const int value = sizeof(adjust_counter(counter<20>())); typedef counter type; typedef counter prior; typedef char (&next)[value+1]; }; char adjust_counter(counter<0>); template void instantiate_ptr_serialization(Serializable*, counter<0>) {} #define BOOST_SERIALIZATION_REGISTER_ARCHIVE(Archive) \ namespace boost { namespace archive { namespace detail { \ get_counter::next adjust_counter(get_counter::type);\ template \ void instantiate_ptr_serialization(Serializable* s, \ get_counter::type) { \ ptr_serialization_support x; \ instantiate_ptr_serialization(s, get_counter::prior()); \ }\ }}} #else // This function gets called, but its only purpose is to participate // in overload resolution with the functions declared by // BOOST_SERIALIZATION_REGISTER_ARCHIVE, below. template void instantiate_ptr_serialization(Serializable*, int, adl_tag ) {} // The function declaration generated by this macro never actually // gets called, but its return type gets instantiated, and that's // enough to cause registration of serialization functions between // Archive and any exported Serializable type. See also: // boost/serialization/export.hpp # define BOOST_SERIALIZATION_REGISTER_ARCHIVE(Archive) \ namespace boost { namespace archive { namespace detail { \ \ template \ BOOST_DEDUCED_TYPENAME _ptr_serialization_support::type \ instantiate_ptr_serialization( Serializable*, Archive*, adl_tag ); \ \ }}} #endif }}} // namespace boost::archive::detail #endif // BOOST_ARCHIVE_DETAIL_INSTANTIATE_SERIALIZE_DWA2006521_HPP utf8_codecvt_facet.hpp000444000765000024 140312161110642 25412 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/detail// 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 // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP #define BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP #define BOOST_UTF8_BEGIN_NAMESPACE \ namespace boost { namespace archive { namespace detail { #define BOOST_UTF8_DECL #define BOOST_UTF8_END_NAMESPACE }}} #include #undef BOOST_UTF8_END_NAMESPACE #undef BOOST_UTF8_DECL #undef BOOST_UTF8_BEGIN_NAMESPACE #endif // BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP impl000755000765000024 012161110702 20503 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archivearchive_serializer_map.ipp000444000765000024 417612161110666 26102 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // archive_serializer_map.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. ////////////////////////////////////////////////////////////////////// // implementation of basic_text_iprimitive overrides for the combination // of template parameters used to implement a text_iprimitive #include #include #include #include namespace boost { namespace archive { namespace detail { #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4511 4512) #endif namespace extra_detail { // anon template class map : public basic_serializer_map {}; } #ifdef BOOST_MSVC # pragma warning(pop) #endif template BOOST_ARCHIVE_OR_WARCHIVE_DECL(bool) archive_serializer_map::insert(const basic_serializer * bs){ return boost::serialization::singleton< extra_detail::map >::get_mutable_instance().insert(bs); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) archive_serializer_map::erase(const basic_serializer * bs){ if(boost::serialization::singleton< extra_detail::map >::is_destroyed()) return; boost::serialization::singleton< extra_detail::map >::get_mutable_instance().erase(bs); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(const basic_serializer *) archive_serializer_map::find( const boost::serialization::extended_type_info & eti ) { return boost::serialization::singleton< extra_detail::map >::get_const_instance().find(eti); } } // namespace detail } // namespace archive } // namespace boost basic_binary_iarchive.ipp000444000765000024 1036712161110657 25711 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_iarchive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; using ::strlen; using ::size_t; } #endif #include #include #include namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implementation of binary_binary_archive template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_iarchive::load_override(class_name_type & t, int){ std::string cn; cn.reserve(BOOST_SERIALIZATION_MAX_KEY_SIZE); load_override(cn, 0); if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)) boost::serialization::throw_exception( archive_exception(archive_exception::invalid_class_name) ); std::memcpy(t, cn.data(), cn.size()); // borland tweak t.t[cn.size()] = '\0'; } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_iarchive::init(){ // read signature in an archive version independent manner std::string file_signature; try { std::size_t l; this->This()->load(l); if(l == std::strlen(BOOST_ARCHIVE_SIGNATURE())) { // borland de-allocator fixup #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != file_signature.data()) #endif file_signature.resize(l); // note breaking a rule here - could be a problem on some platform if(0 < l) this->This()->load_binary(&(*file_signature.begin()), l); } } catch(archive_exception const &) { // catch stream_error archive exceptions // will cause invalid_signature archive exception to be thrown below file_signature = ""; } if(file_signature != BOOST_ARCHIVE_SIGNATURE()) boost::serialization::throw_exception( archive_exception(archive_exception::invalid_signature) ); // make sure the version of the reading archive library can // support the format of the archive being read library_version_type input_library_version; //* this->This() >> input_library_version; { int v = 0; v = this->This()->m_sb.sbumpc(); #if defined(BOOST_LITTLE_ENDIAN) if(v < 6){ ; } else if(v < 7){ // version 6 - next byte should be zero this->This()->m_sb.sbumpc(); } else if(v < 8){ int x1; // version 7 = might be followed by zero or some other byte x1 = this->This()->m_sb.sgetc(); // it's =a zero, push it back if(0 == x1) this->This()->m_sb.sbumpc(); } else{ // version 8+ followed by a zero this->This()->m_sb.sbumpc(); } #elif defined(BOOST_BIG_ENDIAN) if(v == 0) v = this->This()->m_sb.sbumpc(); #endif input_library_version = static_cast(v); } #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) this->set_library_version(input_library_version); #else #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200) detail:: #endif basic_iarchive::set_library_version(input_library_version); #endif if(BOOST_ARCHIVE_VERSION() < input_library_version) boost::serialization::throw_exception( archive_exception(archive_exception::unsupported_version) ); } } // namespace archive } // namespace boost basic_binary_iprimitive.ipp000444000765000024 1447212161110702 26270 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_iprimitive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // size_t, NULL #include // memcpy #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; using ::memcpy; } // namespace std #endif #include // fixup for RogueWave #include #include #include #include #include namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // implementation of basic_binary_iprimitive template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_iprimitive::init() { // Detect attempts to pass native binary archives across // incompatible platforms. This is not fool proof but its // better than nothing. unsigned char size; this->This()->load(size); if(sizeof(int) != size) boost::serialization::throw_exception( archive_exception( archive_exception::incompatible_native_format, "size of int" ) ); this->This()->load(size); if(sizeof(long) != size) boost::serialization::throw_exception( archive_exception( archive_exception::incompatible_native_format, "size of long" ) ); this->This()->load(size); if(sizeof(float) != size) boost::serialization::throw_exception( archive_exception( archive_exception::incompatible_native_format, "size of float" ) ); this->This()->load(size); if(sizeof(double) != size) boost::serialization::throw_exception( archive_exception( archive_exception::incompatible_native_format, "size of double" ) ); // for checking endian int i; this->This()->load(i); if(1 != i) boost::serialization::throw_exception( archive_exception( archive_exception::incompatible_native_format, "endian setting" ) ); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_iprimitive::load(wchar_t * ws) { std::size_t l; // number of wchar_t !!! this->This()->load(l); load_binary(ws, l * sizeof(wchar_t) / sizeof(char)); ws[l] = L'\0'; } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_iprimitive::load(std::string & s) { std::size_t l; this->This()->load(l); // borland de-allocator fixup #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != s.data()) #endif s.resize(l); // note breaking a rule here - could be a problem on some platform if(0 < l) load_binary(&(*s.begin()), l); } #ifndef BOOST_NO_CWCHAR template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_iprimitive::load(char * s) { std::size_t l; this->This()->load(l); load_binary(s, l); s[l] = '\0'; } #endif #ifndef BOOST_NO_STD_WSTRING template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_iprimitive::load(std::wstring & ws) { std::size_t l; this->This()->load(l); // borland de-allocator fixup #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != ws.data()) #endif ws.resize(l); // note breaking a rule here - is could be a problem on some platform load_binary(const_cast(ws.data()), l * sizeof(wchar_t) / sizeof(char)); } #endif template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_binary_iprimitive::basic_binary_iprimitive( std::basic_streambuf & sb, bool no_codecvt ) : #ifndef BOOST_NO_STD_LOCALE m_sb(sb), archive_locale(NULL), locale_saver(m_sb) { if(! no_codecvt){ archive_locale.reset( boost::archive::add_facet( std::locale::classic(), new codecvt_null ) ); m_sb.pubimbue(* archive_locale); } } #else m_sb(sb) {} #endif // some libraries including stl and libcomo fail if the // buffer isn't flushed before the code_cvt facet is changed. // I think this is a bug. We explicity invoke sync to when // we're done with the streambuf to work around this problem. // Note that sync is a protected member of stream buff so we // have to invoke it through a contrived derived class. namespace detail { // note: use "using" to get past msvc bug using namespace std; template class input_streambuf_access : public std::basic_streambuf { public: virtual int sync(){ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) return this->basic_streambuf::sync(); #else return this->basic_streambuf::sync(); #endif } }; } // detail // scoped_ptr requires that archive_locale be a complete type at time of // destruction so define destructor here rather than in the header template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_binary_iprimitive::~basic_binary_iprimitive(){ // push back unread characters //destructor can't throw ! try{ static_cast &>(m_sb).sync(); } catch(...){ } } } // namespace archive } // namespace boost basic_binary_oarchive.ipp000444000765000024 257412161110616 25673 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_oarchive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include #include // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } #endif #include namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implementation of binary_binary_oarchive template #if !defined(__BORLANDC__) BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) #else void #endif basic_binary_oarchive::init(){ // write signature in an archive version independent manner const std::string file_signature(BOOST_ARCHIVE_SIGNATURE()); * this->This() << file_signature; // write library version const library_version_type v(BOOST_ARCHIVE_VERSION()); * this->This() << v; } } // namespace archive } // namespace boost basic_binary_oprimitive.ipp000444000765000024 1150212161110660 26270 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_oprimitive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // NULL #include #include #if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__) namespace std{ using ::strlen; } // namespace std #endif #ifndef BOOST_NO_CWCHAR #include #ifdef BOOST_NO_STDC_NAMESPACE namespace std{ using ::wcslen; } #endif #endif #include #include #include namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // implementation of basic_binary_oprimitive template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_oprimitive::init() { // record native sizes of fundamental types // this is to permit detection of attempts to pass // native binary archives accross incompatible machines. // This is not foolproof but its better than nothing. this->This()->save(static_cast(sizeof(int))); this->This()->save(static_cast(sizeof(long))); this->This()->save(static_cast(sizeof(float))); this->This()->save(static_cast(sizeof(double))); // for checking endianness this->This()->save(int(1)); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_oprimitive::save(const char * s) { std::size_t l = std::strlen(s); this->This()->save(l); save_binary(s, l); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_oprimitive::save(const std::string &s) { std::size_t l = static_cast(s.size()); this->This()->save(l); save_binary(s.data(), l); } #ifndef BOOST_NO_CWCHAR template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_oprimitive::save(const wchar_t * ws) { std::size_t l = std::wcslen(ws); this->This()->save(l); save_binary(ws, l * sizeof(wchar_t) / sizeof(char)); } #endif #ifndef BOOST_NO_STD_WSTRING template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_binary_oprimitive::save(const std::wstring &ws) { std::size_t l = ws.size(); this->This()->save(l); save_binary(ws.data(), l * sizeof(wchar_t) / sizeof(char)); } #endif template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_binary_oprimitive::basic_binary_oprimitive( std::basic_streambuf & sb, bool no_codecvt ) : #ifndef BOOST_NO_STD_LOCALE m_sb(sb), archive_locale(NULL), locale_saver(m_sb) { if(! no_codecvt){ archive_locale.reset( add_facet( std::locale::classic(), new codecvt_null ) ); m_sb.pubimbue(* archive_locale); } } #else m_sb(sb) {} #endif // some libraries including stl and libcomo fail if the // buffer isn't flushed before the code_cvt facet is changed. // I think this is a bug. We explicity invoke sync to when // we're done with the streambuf to work around this problem. // Note that sync is a protected member of stream buff so we // have to invoke it through a contrived derived class. namespace detail { // note: use "using" to get past msvc bug using namespace std; template class output_streambuf_access : public std::basic_streambuf { public: virtual int sync(){ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) return this->basic_streambuf::sync(); #else return this->basic_streambuf::sync(); #endif } }; } // detail // scoped_ptr requires that g be a complete type at time of // destruction so define destructor here rather than in the header template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_binary_oprimitive::~basic_binary_oprimitive(){ // flush buffer //destructor can't throw try{ static_cast &>(m_sb).sync(); } catch(...){ } } } // namespace archive } // namespace boost basic_text_iarchive.ipp000444000765000024 521312161110664 25361 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_iarchive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } #endif #include #include #include namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implementation of text_text_archive template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_text_iarchive::load_override(class_name_type & t, int){ std::string cn; cn.reserve(BOOST_SERIALIZATION_MAX_KEY_SIZE); load_override(cn, 0); if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)) boost::serialization::throw_exception( archive_exception(archive_exception::invalid_class_name) ); std::memcpy(t, cn.data(), cn.size()); // borland tweak t.t[cn.size()] = '\0'; } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_text_iarchive::init(void){ // read signature in an archive version independent manner std::string file_signature; * this->This() >> file_signature; if(file_signature != BOOST_ARCHIVE_SIGNATURE()) boost::serialization::throw_exception( archive_exception(archive_exception::invalid_signature) ); // make sure the version of the reading archive library can // support the format of the archive being read library_version_type input_library_version; * this->This() >> input_library_version; #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) this->set_library_version(input_library_version); #else #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200) detail:: #endif basic_iarchive::set_library_version(input_library_version); #endif // extra little .t is to get around borland quirk if(BOOST_ARCHIVE_VERSION() < input_library_version) boost::serialization::throw_exception( archive_exception(archive_exception::unsupported_version) ); } } // namespace archive } // namespace boost basic_text_iprimitive.ipp000444000765000024 772512161110602 25752 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_iprimitive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // size_t #include // NULL #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include #include #include #include #include #include #include namespace boost { namespace archive { namespace { template bool is_whitespace(CharType c); template<> bool is_whitespace(char t){ return 0 != std::isspace(t); } #ifndef BOOST_NO_CWCHAR template<> bool is_whitespace(wchar_t t){ return 0 != std::iswspace(t); } #endif } // translate base64 text into binary and copy into buffer // until buffer is full. template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_text_iprimitive::load_binary( void *address, std::size_t count ){ typedef BOOST_DEDUCED_TYPENAME IStream::char_type CharType; if(0 == count) return; BOOST_ASSERT( static_cast((std::numeric_limits::max)()) > (count + sizeof(CharType) - 1)/sizeof(CharType) ); if(is.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); // convert from base64 to binary typedef BOOST_DEDUCED_TYPENAME iterators::transform_width< iterators::binary_from_base64< iterators::remove_whitespace< iterators::istream_iterator > ,CharType > ,8 ,6 ,CharType > binary; binary i = binary( BOOST_MAKE_PFTO_WRAPPER( iterators::istream_iterator(is) ) ); char * caddr = static_cast(address); // take care that we don't increment anymore than necessary while(count-- > 0){ *caddr++ = static_cast(*i++); } // skip over any excess input for(;;){ BOOST_DEDUCED_TYPENAME IStream::int_type r; r = is.get(); if(is.eof()) break; if(is_whitespace(static_cast(r))) break; } } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_text_iprimitive::basic_text_iprimitive( IStream &is_, bool no_codecvt ) : #ifndef BOOST_NO_STD_LOCALE is(is_), flags_saver(is_), precision_saver(is_), archive_locale(NULL), locale_saver(* is_.rdbuf()) { if(! no_codecvt){ archive_locale.reset( add_facet( std::locale::classic(), new codecvt_null ) ); is.imbue(* archive_locale); } is >> std::noboolalpha; } #else is(is_), flags_saver(is_), precision_saver(is_) {} #endif template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_text_iprimitive::~basic_text_iprimitive(){ is.sync(); } } // namespace archive } // namespace boost basic_text_oarchive.ipp000444000765000024 332312161110601 25356 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_oarchive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } #endif #include namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implementation of basic_text_oarchive template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_text_oarchive::newtoken() { switch(delimiter){ default: BOOST_ASSERT(false); break; case eol: this->This()->put('\n'); delimiter = space; break; case space: this->This()->put(' '); break; case none: delimiter = space; break; } } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_text_oarchive::init(){ // write signature in an archive version independent manner const std::string file_signature(BOOST_ARCHIVE_SIGNATURE()); * this->This() << file_signature; // write library version const library_version_type v(BOOST_ARCHIVE_VERSION()); * this->This() << v; } } // namespace archive } // namespace boost basic_text_oprimitive.ipp000444000765000024 621512161110646 25761 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_text_oprimitive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // NULL #include #include #include #include #include #include #include #include namespace boost { namespace archive { // translate to base64 and copy in to buffer. template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_text_oprimitive::save_binary( const void *address, std::size_t count ){ typedef BOOST_DEDUCED_TYPENAME OStream::char_type CharType; if(0 == count) return; if(os.fail()) boost::serialization::throw_exception( archive_exception(archive_exception::output_stream_error) ); os.put('\n'); typedef boost::archive::iterators::insert_linebreaks< boost::archive::iterators::base64_from_binary< boost::archive::iterators::transform_width< const char *, 6, 8 > > ,76 ,const char // cwpro8 needs this > base64_text; boost::archive::iterators::ostream_iterator oi(os); std::copy( base64_text(BOOST_MAKE_PFTO_WRAPPER(static_cast(address))), base64_text( BOOST_MAKE_PFTO_WRAPPER(static_cast(address) + count) ), oi ); std::size_t tail = count % 3; if(tail > 0){ *oi++ = '='; if(tail < 2) *oi = '='; } } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_text_oprimitive::basic_text_oprimitive( OStream & os_, bool no_codecvt ) : #ifndef BOOST_NO_STD_LOCALE os(os_), flags_saver(os_), precision_saver(os_), archive_locale(NULL), locale_saver(* os_.rdbuf()) { if(! no_codecvt){ archive_locale.reset( add_facet( std::locale::classic(), new codecvt_null ) ); os.imbue(* archive_locale); } os << std::noboolalpha; } #else os(os_), flags_saver(os_), precision_saver(os_) {} #endif template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_text_oprimitive::~basic_text_oprimitive(){ os << std::endl; } } //namespace boost } //namespace archive basic_xml_grammar.hpp000444000765000024 1270512161110676 25057 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl#ifndef BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP #define BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_grammar.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // this module is derived from simplexml.cpp - an example shipped as part of // the spirit parser. This example contains the following notice: /*============================================================================= simplexml.cpp Spirit V1.3 URL: http://spirit.sourceforge.net/ Copyright (c) 2001, Daniel C. Nuffer This software is provided 'as-is', without any express or implied warranty. In no event will the copyright holder be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. =============================================================================*/ #include #include #include // supress noise #if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) # pragma warning (disable : 4786) // too long name, harmless warning #endif #include #include #include #include #include namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // XML grammar parsing template class basic_xml_grammar { public: // The following is not necessary according to DR45, but at least // one compiler (Compaq C++ 6.5 in strict_ansi mode) chokes otherwise. struct return_values; friend struct return_values; private: typedef BOOST_DEDUCED_TYPENAME std::basic_istream IStream; typedef BOOST_DEDUCED_TYPENAME std::basic_string StringType; typedef BOOST_DEDUCED_TYPENAME boost::spirit::classic::chset chset_t; typedef BOOST_DEDUCED_TYPENAME boost::spirit::classic::chlit chlit_t; typedef BOOST_DEDUCED_TYPENAME boost::spirit::classic::scanner< BOOST_DEDUCED_TYPENAME std::basic_string::iterator > scanner_t; typedef BOOST_DEDUCED_TYPENAME boost::spirit::classic::rule rule_t; // Start grammar definition rule_t Reference, Eq, STag, ETag, LetterOrUnderscoreOrColon, AttValue, CharRef1, CharRef2, CharRef, AmpRef, LTRef, GTRef, AposRef, QuoteRef, CharData, CharDataChars, content, AmpName, LTName, GTName, ClassNameChar, ClassName, Name, XMLDecl, XMLDeclChars, DocTypeDecl, DocTypeDeclChars, ClassIDAttribute, ObjectIDAttribute, ClassNameAttribute, TrackingAttribute, VersionAttribute, UnusedAttribute, Attribute, SignatureAttribute, SerializationWrapper, NameHead, NameTail, AttributeList, S; // XML Character classes chset_t BaseChar, Ideographic, Char, Letter, Digit, CombiningChar, Extender, Sch, NameChar; void init_chset(); bool my_parse( IStream & is, const rule_t &rule_, const CharType delimiter = L'>' ) const ; public: struct return_values { StringType object_name; StringType contents; //class_id_type class_id; int_least16_t class_id; //object_id_type object_id; uint_least32_t object_id; //version_type version; unsigned int version; tracking_type tracking_level; StringType class_name; return_values() : version(0), tracking_level(false) {} } rv; bool parse_start_tag(IStream & is) /*const*/; bool parse_end_tag(IStream & is) const; bool parse_string(IStream & is, StringType & s) /*const*/; void init(IStream & is); void windup(IStream & is); basic_xml_grammar(); }; } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP basic_xml_iarchive.ipp000444000765000024 723412161110657 25204 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_iarchive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // NULL #include #include #include #include #include namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implementation of xml_text_archive template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_iarchive::load_start(const char *name){ // if there's no name if(NULL == name) return; bool result = this->This()->gimpl->parse_start_tag(this->This()->get_is()); if(true != result){ boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); } // don't check start tag at highest level ++depth; return; } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_iarchive::load_end(const char *name){ // if there's no name if(NULL == name) return; bool result = this->This()->gimpl->parse_end_tag(this->This()->get_is()); if(true != result){ boost::serialization::throw_exception( archive_exception(archive_exception::input_stream_error) ); } // don't check start tag at highest level if(0 == --depth) return; if(0 == (this->get_flags() & no_xml_tag_checking)){ // double check that the tag matches what is expected - useful for debug if(0 != name[this->This()->gimpl->rv.object_name.size()] || ! std::equal( this->This()->gimpl->rv.object_name.begin(), this->This()->gimpl->rv.object_name.end(), name ) ){ boost::serialization::throw_exception( xml_archive_exception( xml_archive_exception::xml_archive_tag_mismatch, name ) ); } } } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_iarchive::load_override(object_id_type & t, int){ t = object_id_type(this->This()->gimpl->rv.object_id); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_iarchive::load_override(version_type & t, int){ t = version_type(this->This()->gimpl->rv.version); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_iarchive::load_override(class_id_type & t, int){ t = class_id_type(this->This()->gimpl->rv.class_id); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_iarchive::load_override(tracking_type & t, int){ t = this->This()->gimpl->rv.tracking_level; } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_xml_iarchive::basic_xml_iarchive(unsigned int flags) : detail::common_iarchive(flags), depth(0) {} template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_xml_iarchive::~basic_xml_iarchive(){} } // namespace archive } // namespace boost basic_xml_oarchive.ipp000444000765000024 1763112161110603 25223 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_xml_oarchive.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // NULL #include #if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__) namespace std{ using ::strlen; } // namespace std #endif #include #include #include #include namespace boost { namespace archive { namespace detail { template struct XML_name { void operator()(CharType t) const{ const unsigned char lookup_table[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, // -. 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, // 0-9 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // A- 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, // -Z _ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // a- 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, // -z 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; if((unsigned)t > 127) return; if(0 == lookup_table[(unsigned)t]) boost::serialization::throw_exception( xml_archive_exception( xml_archive_exception::xml_archive_tag_name_error ) ); } }; } // namespace detail /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implemenations of functions common to both types of xml output template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::write_attribute( const char *attribute_name, int t, const char *conjunction ){ this->This()->put(' '); this->This()->put(attribute_name); this->This()->put(conjunction); this->This()->save(t); this->This()->put('"'); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::write_attribute( const char *attribute_name, const char *key ){ this->This()->put(' '); this->This()->put(attribute_name); this->This()->put("=\""); this->This()->save(key); this->This()->put('"'); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::indent(){ int i; for(i = depth; i-- > 0;) this->This()->put('\t'); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_start(const char *name) { if(NULL == name) return; // be sure name has no invalid characters std::for_each(name, name + std::strlen(name), detail::XML_name()); end_preamble(); if(depth > 0){ this->This()->put('\n'); indent(); } ++depth; this->This()->put('<'); this->This()->save(name); pending_preamble = true; indent_next = false; } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_end(const char *name) { if(NULL == name) return; // be sure name has no invalid characters std::for_each(name, name + std::strlen(name), detail::XML_name()); end_preamble(); --depth; if(indent_next){ this->This()->put('\n'); indent(); } indent_next = true; this->This()->put("This()->save(name); this->This()->put('>'); if(0 == depth) this->This()->put('\n'); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::end_preamble(){ if(pending_preamble){ this->This()->put('>'); pending_preamble = false; } } #if 0 template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override(const object_id_type & t, int) { int i = t.t; // extra .t is for borland write_attribute(BOOST_ARCHIVE_XML_OBJECT_ID(), i, "=\"_"); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override( const object_reference_type & t, int ){ int i = t.t; // extra .t is for borland write_attribute(BOOST_ARCHIVE_XML_OBJECT_REFERENCE(), i, "=\"_"); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override(const version_type & t, int) { int i = t.t; // extra .t is for borland write_attribute(BOOST_ARCHIVE_XML_VERSION(), i); } #endif template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override(const object_id_type & t, int) { // borland doesn't do conversion of STRONG_TYPEDEFs very well const unsigned int i = t; write_attribute(BOOST_ARCHIVE_XML_OBJECT_ID(), i, "=\"_"); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override( const object_reference_type & t, int ){ const unsigned int i = t; write_attribute(BOOST_ARCHIVE_XML_OBJECT_REFERENCE(), i, "=\"_"); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override(const version_type & t, int) { const unsigned int i = t; write_attribute(BOOST_ARCHIVE_XML_VERSION(), i); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override(const class_id_type & t, int) { write_attribute(BOOST_ARCHIVE_XML_CLASS_ID(), t); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override( const class_id_reference_type & t, int ){ write_attribute(BOOST_ARCHIVE_XML_CLASS_ID_REFERENCE(), t); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override( const class_id_optional_type & t, int ){ write_attribute(BOOST_ARCHIVE_XML_CLASS_ID(), t); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override(const class_name_type & t, int) { const char * key = t; if(NULL == key) return; write_attribute(BOOST_ARCHIVE_XML_CLASS_NAME(), key); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::save_override(const tracking_type & t, int) { write_attribute(BOOST_ARCHIVE_XML_TRACKING(), t.t); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) basic_xml_oarchive::init(){ // xml header this->This()->put("\n"); this->This()->put("\n"); // xml document wrapper - outer root this->This()->put("This()->put(">\n"); } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_xml_oarchive::basic_xml_oarchive(unsigned int flags) : detail::common_oarchive(flags), depth(0), indent_next(false), pending_preamble(false) { } template BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_xml_oarchive::~basic_xml_oarchive(){ if(0 == (this->get_flags() & no_header)){ BOOST_TRY{ this->This()->put("\n"); } BOOST_CATCH(...){} BOOST_CATCH_END } } } // namespace archive } // namespace boost text_iarchive_impl.ipp000444000765000024 660212161110620 25234 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_iarchive_impl.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. ////////////////////////////////////////////////////////////////////// // implementation of basic_text_iprimitive overrides for the combination // of template parameters used to implement a text_iprimitive #include // size_t, NULL #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include // RogueWave #include namespace boost { namespace archive { template BOOST_ARCHIVE_DECL(void) text_iarchive_impl::load(char *s) { std::size_t size; * this->This() >> size; // skip separating space is.get(); // Works on all tested platforms is.read(s, size); s[size] = '\0'; } template BOOST_ARCHIVE_DECL(void) text_iarchive_impl::load(std::string &s) { std::size_t size; * this->This() >> size; // skip separating space is.get(); // borland de-allocator fixup #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != s.data()) #endif s.resize(size); if(0 < size) is.read(&(*s.begin()), size); } #ifndef BOOST_NO_CWCHAR #ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_ARCHIVE_DECL(void) text_iarchive_impl::load(wchar_t *ws) { std::size_t size; * this->This() >> size; // skip separating space is.get(); is.read((char *)ws, size * sizeof(wchar_t)/sizeof(char)); ws[size] = L'\0'; } #endif // BOOST_NO_INTRINSIC_WCHAR_T #ifndef BOOST_NO_STD_WSTRING template BOOST_ARCHIVE_DECL(void) text_iarchive_impl::load(std::wstring &ws) { std::size_t size; * this->This() >> size; // borland de-allocator fixup #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != ws.data()) #endif ws.resize(size); // skip separating space is.get(); is.read((char *)ws.data(), size * sizeof(wchar_t)/sizeof(char)); } #endif // BOOST_NO_STD_WSTRING #endif // BOOST_NO_CWCHAR template BOOST_ARCHIVE_DECL(void) text_iarchive_impl::load_override(class_name_type & t, int){ basic_text_iarchive::load_override(t, 0); } template BOOST_ARCHIVE_DECL(void) text_iarchive_impl::init(){ basic_text_iarchive::init(); } template BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) text_iarchive_impl::text_iarchive_impl( std::istream & is, unsigned int flags ) : basic_text_iprimitive( is, 0 != (flags & no_codecvt) ), basic_text_iarchive(flags) { if(0 == (flags & no_header)) #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) this->init(); #else this->basic_text_iarchive::init(); #endif } } // namespace archive } // namespace boost text_oarchive_impl.ipp000444000765000024 633212161110633 25246 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_oarchive_impl.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include #include // size_t #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #ifndef BOOST_NO_CWCHAR #include #ifdef BOOST_NO_STDC_NAMESPACE namespace std{ using ::wcslen; } #endif #endif #include #include namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // implementation of basic_text_oprimitive overrides for the combination // of template parameters used to create a text_oprimitive template BOOST_ARCHIVE_DECL(void) text_oarchive_impl::save(const char * s) { const std::size_t len = std::ostream::traits_type::length(s); *this->This() << len; this->This()->newtoken(); os << s; } template BOOST_ARCHIVE_DECL(void) text_oarchive_impl::save(const std::string &s) { const std::size_t size = s.size(); *this->This() << size; this->This()->newtoken(); os << s; } #ifndef BOOST_NO_CWCHAR #ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_ARCHIVE_DECL(void) text_oarchive_impl::save(const wchar_t * ws) { const std::size_t l = std::wcslen(ws); * this->This() << l; this->This()->newtoken(); os.write((const char *)ws, l * sizeof(wchar_t)/sizeof(char)); } #endif #ifndef BOOST_NO_STD_WSTRING template BOOST_ARCHIVE_DECL(void) text_oarchive_impl::save(const std::wstring &ws) { const std::size_t l = ws.size(); * this->This() << l; this->This()->newtoken(); os.write((const char *)(ws.data()), l * sizeof(wchar_t)/sizeof(char)); } #endif #endif // BOOST_NO_CWCHAR template BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) text_oarchive_impl::text_oarchive_impl( std::ostream & os, unsigned int flags ) : basic_text_oprimitive( os, 0 != (flags & no_codecvt) ), basic_text_oarchive(flags) { if(0 == (flags & no_header)) #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) this->init(); #else this->basic_text_oarchive::init(); #endif } template BOOST_ARCHIVE_DECL(void) text_oarchive_impl::save_binary(const void *address, std::size_t count){ put('\n'); this->end_preamble(); #if ! defined(__MWERKS__) this->basic_text_oprimitive::save_binary( #else this->basic_text_oprimitive::save_binary( #endif address, count ); this->delimiter = this->eol; } } // namespace archive } // namespace boost text_wiarchive_impl.ipp000444000765000024 571412161110677 25442 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_text_wiarchive_impl.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // size_t, NULL #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include // fixup for RogueWave #ifndef BOOST_NO_STD_WSTREAMBUF #include namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // implementation of wiprimtives functions // template BOOST_WARCHIVE_DECL(void) text_wiarchive_impl::load(char *s) { std::size_t size; * this->This() >> size; // skip separating space is.get(); while(size-- > 0){ *s++ = is.narrow(is.get(), '\0'); } *s = '\0'; } template BOOST_WARCHIVE_DECL(void) text_wiarchive_impl::load(std::string &s) { std::size_t size; * this->This() >> size; // skip separating space is.get(); #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != s.data()) #endif s.resize(0); s.reserve(size); while(size-- > 0){ int x = is.narrow(is.get(), '\0'); s += x; } } #ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_WARCHIVE_DECL(void) text_wiarchive_impl::load(wchar_t *s) { std::size_t size; * this->This() >> size; // skip separating space is.get(); // Works on all tested platforms is.read(s, size); s[size] = L'\0'; } #endif #ifndef BOOST_NO_STD_WSTRING template BOOST_WARCHIVE_DECL(void) text_wiarchive_impl::load(std::wstring &ws) { std::size_t size; * this->This() >> size; // skip separating space is.get(); // borland complains about resize // borland de-allocator fixup #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != ws.data()) #endif ws.resize(size); // note breaking a rule here - is this a problem on some platform is.read(const_cast(ws.data()), size); } #endif template BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) text_wiarchive_impl::text_wiarchive_impl( std::wistream & is, unsigned int flags ) : basic_text_iprimitive( is, 0 != (flags & no_codecvt) ), basic_text_iarchive(flags) { if(0 == (flags & no_header)) basic_text_iarchive::init(); } } // archive } // boost #endif // BOOST_NO_STD_WSTREAMBUF text_woarchive_impl.ipp000444000765000024 430412161110632 25431 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // text_woarchive_impl.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #ifndef BOOST_NO_STD_WSTREAMBUF #include #include // size_t #if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__) namespace std{ using ::strlen; using ::size_t; } // namespace std #endif #include #include namespace boost { namespace archive { ////////////////////////////////////////////////////////////////////// // implementation of woarchive functions // template BOOST_WARCHIVE_DECL(void) text_woarchive_impl::save(const char *s) { // note: superfluous local variable fixes borland warning const std::size_t size = std::strlen(s); * this->This() << size; this->This()->newtoken(); while(*s != '\0') os.put(os.widen(*s++)); } template BOOST_WARCHIVE_DECL(void) text_woarchive_impl::save(const std::string &s) { const std::size_t size = s.size(); * this->This() << size; this->This()->newtoken(); const char * cptr = s.data(); for(std::size_t i = size; i-- > 0;) os.put(os.widen(*cptr++)); } #ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_WARCHIVE_DECL(void) text_woarchive_impl::save(const wchar_t *ws) { const std::size_t size = std::wostream::traits_type::length(ws); * this->This() << size; this->This()->newtoken(); os.write(ws, size); } #endif #ifndef BOOST_NO_STD_WSTRING template BOOST_WARCHIVE_DECL(void) text_woarchive_impl::save(const std::wstring &ws) { const std::size_t size = ws.length(); * this->This() << size; this->This()->newtoken(); os.write(ws.data(), size); } #endif } // namespace archive } // namespace boost #endif xml_iarchive_impl.ipp000444000765000024 1336012161110620 25067 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_iarchive_impl.cpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // memcpy #include // NULL #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } // namespace std #endif #ifndef BOOST_NO_CWCHAR #include // mbtowc #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::mbtowc; } // namespace std #endif #endif // BOOST_NO_CWCHAR #include // RogueWave and Dinkumware #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) #include #endif #include #include #include #include #include #include "basic_xml_grammar.hpp" namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implemenations of functions specific to char archives // wide char stuff used by char archives #ifndef BOOST_NO_CWCHAR #ifndef BOOST_NO_STD_WSTRING template BOOST_ARCHIVE_DECL(void) xml_iarchive_impl::load(std::wstring &ws){ std::string s; bool result = gimpl->parse_string(is, s); if(! result) boost::serialization::throw_exception( xml_archive_exception(xml_archive_exception::xml_archive_parsing_error) ); #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != ws.data()) #endif ws.resize(0); const char * start = s.data(); const char * end = start + s.size(); while(start < end){ wchar_t wc; int resultx = std::mbtowc(&wc, start, end - start); if(0 < resultx){ start += resultx; ws += wc; continue; } boost::serialization::throw_exception( iterators::dataflow_exception( iterators::dataflow_exception::invalid_conversion ) ); } } #endif // BOOST_NO_STD_WSTRING #ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_ARCHIVE_DECL(void) xml_iarchive_impl::load(wchar_t * ws){ std::string s; bool result = gimpl->parse_string(is, s); if(! result) boost::serialization::throw_exception( xml_archive_exception(xml_archive_exception::xml_archive_parsing_error) ); const char * start = s.data(); const char * end = start + s.size(); while(start < end){ wchar_t wc; int result = std::mbtowc(&wc, start, end - start); if(0 < result){ start += result; *ws++ = wc; continue; } boost::serialization::throw_exception( iterators::dataflow_exception( iterators::dataflow_exception::invalid_conversion ) ); } *ws = L'\0'; } #endif // BOOST_NO_INTRINSIC_WCHAR_T #endif // BOOST_NO_CWCHAR template BOOST_ARCHIVE_DECL(void) xml_iarchive_impl::load(std::string &s){ bool result = gimpl->parse_string(is, s); if(! result) boost::serialization::throw_exception( xml_archive_exception(xml_archive_exception::xml_archive_parsing_error) ); } template BOOST_ARCHIVE_DECL(void) xml_iarchive_impl::load(char * s){ std::string tstring; bool result = gimpl->parse_string(is, tstring); if(! result) boost::serialization::throw_exception( xml_archive_exception(xml_archive_exception::xml_archive_parsing_error) ); std::memcpy(s, tstring.data(), tstring.size()); s[tstring.size()] = 0; } template BOOST_ARCHIVE_DECL(void) xml_iarchive_impl::load_override(class_name_type & t, int){ const std::string & s = gimpl->rv.class_name; if(s.size() > BOOST_SERIALIZATION_MAX_KEY_SIZE - 1) boost::serialization::throw_exception( archive_exception(archive_exception::invalid_class_name) ); char * tptr = t; std::memcpy(tptr, s.data(), s.size()); tptr[s.size()] = '\0'; } template BOOST_ARCHIVE_DECL(void) xml_iarchive_impl::init(){ gimpl->init(is); this->set_library_version( library_version_type(gimpl->rv.version) ); } template BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) xml_iarchive_impl::xml_iarchive_impl( std::istream &is_, unsigned int flags ) : basic_text_iprimitive( is_, 0 != (flags & no_codecvt) ), basic_xml_iarchive(flags), gimpl(new xml_grammar()) { if(0 == (flags & no_header)){ BOOST_TRY{ init(); } BOOST_CATCH(...){ delete gimpl; #ifndef BOOST_NO_EXCEPTIONS throw; // re-throw #endif } BOOST_CATCH_END } } template BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) xml_iarchive_impl::~xml_iarchive_impl(){ if(0 == (this->get_flags() & no_header)){ BOOST_TRY{ gimpl->windup(is); } BOOST_CATCH(...){} BOOST_CATCH_END } delete gimpl; } } // namespace archive } // namespace boost xml_oarchive_impl.ipp000444000765000024 723612161110661 25067 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_oarchive_impl.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include // strlen #include // msvc 6.0 needs this to suppress warnings #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::strlen; } // namespace std #endif #include #include #ifndef BOOST_NO_CWCHAR #include #include #endif namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implemenations of functions specific to char archives // wide char stuff used by char archives #ifndef BOOST_NO_CWCHAR // copy chars to output escaping to xml and translating wide chars to mb chars template void save_iterator(std::ostream &os, InputIterator begin, InputIterator end){ typedef boost::archive::iterators::mb_from_wchar< boost::archive::iterators::xml_escape > translator; std::copy( translator(BOOST_MAKE_PFTO_WRAPPER(begin)), translator(BOOST_MAKE_PFTO_WRAPPER(end)), boost::archive::iterators::ostream_iterator(os) ); } #ifndef BOOST_NO_STD_WSTRING template BOOST_ARCHIVE_DECL(void) xml_oarchive_impl::save(const std::wstring & ws){ // at least one library doesn't typedef value_type for strings // so rather than using string directly make a pointer iterator out of it // save_iterator(os, ws.data(), ws.data() + std::wcslen(ws.data())); save_iterator(os, ws.data(), ws.data() + ws.size()); } #endif #ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_ARCHIVE_DECL(void) xml_oarchive_impl::save(const wchar_t * ws){ save_iterator(os, ws, ws + std::wcslen(ws)); } #endif #endif // BOOST_NO_CWCHAR template BOOST_ARCHIVE_DECL(void) xml_oarchive_impl::save(const std::string & s){ // at least one library doesn't typedef value_type for strings // so rather than using string directly make a pointer iterator out of it typedef boost::archive::iterators::xml_escape< const char * > xml_escape_translator; std::copy( xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s.data())), xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s.data()+ s.size())), boost::archive::iterators::ostream_iterator(os) ); } template BOOST_ARCHIVE_DECL(void) xml_oarchive_impl::save(const char * s){ typedef boost::archive::iterators::xml_escape< const char * > xml_escape_translator; std::copy( xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s)), xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s + std::strlen(s))), boost::archive::iterators::ostream_iterator(os) ); } template BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) xml_oarchive_impl::xml_oarchive_impl( std::ostream & os_, unsigned int flags ) : basic_text_oprimitive( os_, 0 != (flags & no_codecvt) ), basic_xml_oarchive(flags) { if(0 == (flags & no_header)) this->init(); } } // namespace archive } // namespace boost xml_wiarchive_impl.ipp000444000765000024 1350312161110660 25261 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_wiprimitive.cpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include // for BOOST_DEDUCED_TYPENAME #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } //std #endif #include // msvc 6.0 needs this to suppress warnings #ifndef BOOST_NO_STD_WSTREAMBUF #include #include #include // Dinkumware and RogueWave #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) #include #endif #include #include #include #include #include #include #include #include #include #include #include "basic_xml_grammar.hpp" namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implemenations of functions specific to wide char archives namespace { // anonymous void copy_to_ptr(char * s, const std::wstring & ws){ std::copy( iterators::mb_from_wchar( BOOST_MAKE_PFTO_WRAPPER(ws.begin()) ), iterators::mb_from_wchar( BOOST_MAKE_PFTO_WRAPPER(ws.end()) ), s ); s[ws.size()] = 0; } } // anonymous template BOOST_WARCHIVE_DECL(void) xml_wiarchive_impl::load(std::string & s){ std::wstring ws; bool result = gimpl->parse_string(is, ws); if(! result) boost::serialization::throw_exception( xml_archive_exception(xml_archive_exception::xml_archive_parsing_error) ); #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != s.data()) #endif s.resize(0); s.reserve(ws.size()); std::copy( iterators::mb_from_wchar( BOOST_MAKE_PFTO_WRAPPER(ws.begin()) ), iterators::mb_from_wchar( BOOST_MAKE_PFTO_WRAPPER(ws.end()) ), std::back_inserter(s) ); } #ifndef BOOST_NO_STD_WSTRING template BOOST_WARCHIVE_DECL(void) xml_wiarchive_impl::load(std::wstring & ws){ bool result = gimpl->parse_string(is, ws); if(! result) boost::serialization::throw_exception( xml_archive_exception(xml_archive_exception::xml_archive_parsing_error) ); } #endif template BOOST_WARCHIVE_DECL(void) xml_wiarchive_impl::load(char * s){ std::wstring ws; bool result = gimpl->parse_string(is, ws); if(! result) boost::serialization::throw_exception( xml_archive_exception(xml_archive_exception::xml_archive_parsing_error) ); copy_to_ptr(s, ws); } #ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_WARCHIVE_DECL(void) xml_wiarchive_impl::load(wchar_t * ws){ std::wstring twstring; bool result = gimpl->parse_string(is, twstring); if(! result) boost::serialization::throw_exception( xml_archive_exception(xml_archive_exception::xml_archive_parsing_error) ); std::memcpy(ws, twstring.c_str(), twstring.size()); ws[twstring.size()] = L'\0'; } #endif template BOOST_WARCHIVE_DECL(void) xml_wiarchive_impl::load_override(class_name_type & t, int){ const std::wstring & ws = gimpl->rv.class_name; if(ws.size() > BOOST_SERIALIZATION_MAX_KEY_SIZE - 1) boost::serialization::throw_exception( archive_exception(archive_exception::invalid_class_name) ); copy_to_ptr(t, ws); } template BOOST_WARCHIVE_DECL(void) xml_wiarchive_impl::init(){ gimpl->init(is); this->set_library_version( library_version_type(gimpl->rv.version) ); } template BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) xml_wiarchive_impl::xml_wiarchive_impl( std::wistream &is_, unsigned int flags ) : basic_text_iprimitive( is_, true // don't change the codecvt - use the one below ), basic_xml_iarchive(flags), gimpl(new xml_wgrammar()) { if(0 == (flags & no_codecvt)){ archive_locale.reset( add_facet( std::locale::classic(), new boost::archive::detail::utf8_codecvt_facet ) ); is.imbue(* archive_locale); } if(0 == (flags & no_header)){ BOOST_TRY{ this->init(); } BOOST_CATCH(...){ delete gimpl; #ifndef BOOST_NO_EXCEPTIONS throw; // re-throw #endif } BOOST_CATCH_END } } template BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) xml_wiarchive_impl::~xml_wiarchive_impl(){ if(0 == (this->get_flags() & no_header)){ BOOST_TRY{ gimpl->windup(is); } BOOST_CATCH(...){} BOOST_CATCH_END } delete gimpl; } } // namespace archive } // namespace boost #endif // BOOST_NO_STD_WSTREAMBUF xml_woarchive_impl.ipp000444000765000024 1260412161110676 25277 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/impl/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_woarchive_impl.ipp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #ifndef BOOST_NO_STD_WSTREAMBUF #include #include #include #include #include // msvc 6.0 needs this to suppress warnings // for BOOST_DEDUCED_TYPENAME #include // strlen #include // mbtowc #include // wcslen #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::strlen; #if ! defined(BOOST_NO_INTRINSIC_WCHAR_T) using ::mbtowc; using ::wcslen; #endif } // namespace std #endif #include #include #include #include #include #include #include #include namespace boost { namespace archive { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implemenations of functions specific to wide char archives // copy chars to output escaping to xml and widening characters as we go template void save_iterator(std::wostream &os, InputIterator begin, InputIterator end){ typedef iterators::wchar_from_mb< iterators::xml_escape > xmbtows; std::copy( xmbtows(BOOST_MAKE_PFTO_WRAPPER(begin)), xmbtows(BOOST_MAKE_PFTO_WRAPPER(end)), boost::archive::iterators::ostream_iterator(os) ); } template BOOST_WARCHIVE_DECL(void) xml_woarchive_impl::save(const std::string & s){ // note: we don't use s.begin() and s.end() because dinkumware // doesn't have string::value_type defined. So use a wrapper // around these values to implement the definitions. const char * begin = s.data(); const char * end = begin + s.size(); save_iterator(os, begin, end); } #ifndef BOOST_NO_STD_WSTRING template BOOST_WARCHIVE_DECL(void) xml_woarchive_impl::save(const std::wstring & ws){ #if 0 typedef iterators::xml_escape xmbtows; std::copy( xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws.begin())), xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws.end())), boost::archive::iterators::ostream_iterator(os) ); #endif typedef iterators::xml_escape xmbtows; std::copy( xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws.data())), xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws.data() + ws.size())), boost::archive::iterators::ostream_iterator(os) ); } #endif //BOOST_NO_STD_WSTRING template BOOST_WARCHIVE_DECL(void) xml_woarchive_impl::save(const char * s){ save_iterator(os, s, s + std::strlen(s)); } #ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_WARCHIVE_DECL(void) xml_woarchive_impl::save(const wchar_t * ws){ os << ws; typedef iterators::xml_escape xmbtows; std::copy( xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws)), xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws + std::wcslen(ws))), boost::archive::iterators::ostream_iterator(os) ); } #endif template BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY()) xml_woarchive_impl::xml_woarchive_impl( std::wostream & os_, unsigned int flags ) : basic_text_oprimitive( os_, true // don't change the codecvt - use the one below ), basic_xml_oarchive(flags) { // Standard behavior is that imbue can be called // a) before output is invoked or // b) after flush has been called. This prevents one-to-many // transforms (such as one to many transforms from getting // mixed up. Unfortunately, STLPort doesn't respect b) above // so the restoration of the original archive locale done by // the locale_saver doesn't get processed, // before the current one is destroyed. // so the codecvt doesn't get replaced with the orginal // so closing the stream invokes codecvt::do_unshift // so it crashes because the corresponding locale that contained // the codecvt isn't around any more. // we can hack around this by using a static codecvt that never // gets destroyed. if(0 == (flags & no_codecvt)){ boost::archive::detail::utf8_codecvt_facet *pfacet; #if defined(__SGI_STL_PORT) static boost::archive::detail::utf8_codecvt_facet facet(static_cast(1)); pfacet = & facet; #else pfacet = new boost::archive::detail::utf8_codecvt_facet; #endif archive_locale.reset(add_facet(std::locale::classic(), pfacet)); os.imbue(* archive_locale); } if(0 == (flags & no_header)) this->init(); } } // namespace archive } // namespace boost #endif //BOOST_NO_STD_WSTREAMBUF iterators000755000765000024 012161110700 21554 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archivebase64_from_binary.hpp000444000765000024 670112161110655 26112 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP #define BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // base64_from_binary.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // size_t #include // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // convert binary integers to base64 characters namespace detail { template struct from_6_bit { typedef CharType result_type; CharType operator()(CharType t) const{ const char * lookup_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789" "+/"; BOOST_ASSERT(t < 64); return lookup_table[static_cast(t)]; } }; } // namespace detail // note: what we would like to do is // template // typedef transform_iterator< // from_6_bit, // transform_width // > base64_from_binary; // but C++ won't accept this. Rather than using a "type generator" and // using a different syntax, make a derivation which should be equivalent. // // Another issue addressed here is that the transform_iterator doesn't have // a templated constructor. This makes it incompatible with the dataflow // ideal. This is also addressed here. //template template< class Base, class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value::type > class base64_from_binary : public transform_iterator< detail::from_6_bit, Base > { friend class boost::iterator_core_access; typedef transform_iterator< BOOST_DEDUCED_TYPENAME detail::from_6_bit, Base > super_t; public: // make composible buy using templated constructor template base64_from_binary(BOOST_PFTO_WRAPPER(T) start) : super_t( Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start))), detail::from_6_bit() ) {} // intel 7.1 doesn't like default copy constructor base64_from_binary(const base64_from_binary & rhs) : super_t( Base(rhs.base_reference()), detail::from_6_bit() ) {} // base64_from_binary(){}; }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP binary_from_base64.hpp000444000765000024 1006512161110677 26134 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP #define BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // binary_from_base64.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // for BOOST_DEDUCED_TYPENAME #include #include #include #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // convert base64 characters to binary data namespace detail { template struct to_6_bit { typedef CharType result_type; CharType operator()(CharType t) const{ const signed char lookup_table[] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63, 52,53,54,55,56,57,58,59,60,61,-1,-1,-1, 0,-1,-1, // render '=' as 0 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, 15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1, -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1 }; // metrowerks trips this assertion - how come? #if ! defined(__MWERKS__) BOOST_STATIC_ASSERT(128 == sizeof(lookup_table)); #endif signed char value = -1; if((unsigned)t <= 127) value = lookup_table[(unsigned)t]; if(-1 == value) boost::serialization::throw_exception( dataflow_exception(dataflow_exception::invalid_base64_character) ); return value; } }; } // namespace detail // note: what we would like to do is // template // typedef transform_iterator< // from_6_bit, // transform_width // > base64_from_binary; // but C++ won't accept this. Rather than using a "type generator" and // using a different syntax, make a derivation which should be equivalent. // // Another issue addressed here is that the transform_iterator doesn't have // a templated constructor. This makes it incompatible with the dataflow // ideal. This is also addressed here. template< class Base, class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value::type > class binary_from_base64 : public transform_iterator< detail::to_6_bit, Base > { friend class boost::iterator_core_access; typedef transform_iterator< detail::to_6_bit, Base > super_t; public: // make composible buy using templated constructor template binary_from_base64(BOOST_PFTO_WRAPPER(T) start) : super_t( Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start))), detail::to_6_bit() ) {} // intel 7.1 doesn't like default copy constructor binary_from_base64(const binary_from_base64 & rhs) : super_t( Base(rhs.base_reference()), detail::to_6_bit() ) {} // binary_from_base64(){}; }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP dataflow_exception.hpp000444000765000024 450112161110600 26300 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP #define BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // dataflow_exception.hpp: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #ifndef BOOST_NO_EXCEPTIONS #include #endif //BOOST_NO_EXCEPTIONS #include namespace boost { namespace archive { namespace iterators { ////////////////////////////////////////////////////////////////////// // exceptions thrown by dataflows // class dataflow_exception : public std::exception { public: typedef enum { invalid_6_bitcode, invalid_base64_character, invalid_xml_escape_sequence, comparison_not_permitted, invalid_conversion, other_exception } exception_code; exception_code code; dataflow_exception(exception_code c = other_exception) : code(c) {} virtual const char *what( ) const throw( ) { const char *msg = "unknown exception code"; switch(code){ case invalid_6_bitcode: msg = "attempt to encode a value > 6 bits"; break; case invalid_base64_character: msg = "attempt to decode a value not in base64 char set"; break; case invalid_xml_escape_sequence: msg = "invalid xml escape_sequence"; break; case comparison_not_permitted: msg = "cannot invoke iterator comparison now"; break; case invalid_conversion: msg = "invalid multbyte/wide char conversion"; break; default: BOOST_ASSERT(false); break; } return msg; } }; } // namespace iterators } // namespace archive } // namespace boost #endif //BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP escape.hpp000444000765000024 637312161110652 23701 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP #define BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // escape.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // NULL #include // for BOOST_DEDUCED_TYPENAME #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // insert escapes into text template class escape : public boost::iterator_adaptor< Derived, Base, BOOST_DEDUCED_TYPENAME boost::iterator_value::type, single_pass_traversal_tag, BOOST_DEDUCED_TYPENAME boost::iterator_value::type > { typedef BOOST_DEDUCED_TYPENAME boost::iterator_value::type base_value_type; typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference::type reference_type; friend class boost::iterator_core_access; typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< Derived, Base, base_value_type, single_pass_traversal_tag, base_value_type > super_t; typedef escape this_t; void dereference_impl() { m_current_value = static_cast(this)->fill(m_bnext, m_bend); m_full = true; } //Access the value referred to reference_type dereference() const { if(!m_full) const_cast(this)->dereference_impl(); return m_current_value; } bool equal(const this_t & rhs) const { if(m_full){ if(! rhs.m_full) const_cast(& rhs)->dereference_impl(); } else{ if(rhs.m_full) const_cast(this)->dereference_impl(); } if(m_bnext != rhs.m_bnext) return false; if(this->base_reference() != rhs.base_reference()) return false; return true; } void increment(){ if(++m_bnext < m_bend){ m_current_value = *m_bnext; return; } ++(this->base_reference()); m_bnext = NULL; m_bend = NULL; m_full = false; } // buffer to handle pending characters const base_value_type *m_bnext; const base_value_type *m_bend; bool m_full; base_value_type m_current_value; public: escape(Base base) : super_t(base), m_bnext(NULL), m_bend(NULL), m_full(false) { } }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP insert_linebreaks.hpp000444000765000024 555412161110676 26152 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP #define BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // insert_linebreaks.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::memcpy; } #endif #include #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // insert line break every N characters template< class Base, int N, class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value::type > class insert_linebreaks : public iterator_adaptor< insert_linebreaks, Base, CharType, single_pass_traversal_tag, CharType > { private: friend class boost::iterator_core_access; typedef iterator_adaptor< insert_linebreaks, Base, CharType, single_pass_traversal_tag, CharType > super_t; bool equal(const insert_linebreaks & rhs) const { return // m_count == rhs.m_count // && base_reference() == rhs.base_reference() this->base_reference() == rhs.base_reference() ; } void increment() { if(m_count == N){ m_count = 0; return; } ++m_count; ++(this->base_reference()); } CharType dereference() const { if(m_count == N) return '\n'; return * (this->base_reference()); } unsigned int m_count; public: // make composible buy using templated constructor template insert_linebreaks(BOOST_PFTO_WRAPPER(T) start) : super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))), m_count(0) {} // intel 7.1 doesn't like default copy constructor insert_linebreaks(const insert_linebreaks & rhs) : super_t(rhs.base_reference()), m_count(rhs.m_count) {} }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP istream_iterator.hpp000444000765000024 566212161110621 26012 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP #define BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // istream_iterator.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // note: this is a custom version of the standard istream_iterator. // This is necessary as the standard version doesn't work as expected // for wchar_t based streams on systems for which wchar_t not a true // type but rather a synonym for some integer type. #include // NULL #include #include namespace boost { namespace archive { namespace iterators { // given a type, make an input iterator based on a pointer to that type template class istream_iterator : public boost::iterator_facade< istream_iterator, Elem, std::input_iterator_tag, Elem > { friend class boost::iterator_core_access; typedef istream_iterator this_t ; typedef BOOST_DEDUCED_TYPENAME boost::iterator_facade< istream_iterator, Elem, std::input_iterator_tag, Elem > super_t; typedef BOOST_DEDUCED_TYPENAME std::basic_istream istream_type; bool equal(const this_t & rhs) const { // note: only works for comparison against end of stream return m_istream == rhs.m_istream; } /* //Access the value referred to Elem dereference() const { return m_current_value; } void increment(){ if(NULL != m_istream){ m_current_value = static_cast(m_istream->get()); if(! m_istream->good()){ const_cast(this)->m_istream = NULL; } } } */ //Access the value referred to Elem dereference() const { return m_istream->peek(); } void increment(){ if(NULL != m_istream){ m_istream->ignore(1); } } istream_type *m_istream; Elem m_current_value; public: istream_iterator(istream_type & is) : m_istream(& is) { //increment(); } istream_iterator() : m_istream(NULL) {} istream_iterator(const istream_iterator & rhs) : m_istream(rhs.m_istream), m_current_value(rhs.m_current_value) {} }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP mb_from_wchar.hpp000444000765000024 754612161110700 25243 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP #define BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // mb_from_wchar.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // size_t #include // for wctomb() #include // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; using ::wctomb; } // namespace std #endif #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // class used by text archives to translate wide strings and to char // strings of the currently selected locale template // the input iterator class mb_from_wchar : public boost::iterator_adaptor< mb_from_wchar, Base, wchar_t, single_pass_traversal_tag, char > { friend class boost::iterator_core_access; typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< mb_from_wchar, Base, wchar_t, single_pass_traversal_tag, char > super_t; typedef mb_from_wchar this_t; char dereference_impl() { if(! m_full){ fill(); m_full = true; } return m_buffer[m_bnext]; } char dereference() const { return (const_cast(this))->dereference_impl(); } // test for iterator equality bool equal(const mb_from_wchar & rhs) const { // once the value is filled, the base_reference has been incremented // so don't permit comparison anymore. return 0 == m_bend && 0 == m_bnext && this->base_reference() == rhs.base_reference() ; } void fill(){ wchar_t value = * this->base_reference(); #if (defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 3) \ || ((__MINGW32_MAJOR_VERSION == 3) && (__MINGW32_MINOR_VERSION >= 8)))) m_bend = std::wcrtomb(m_buffer, value, 0); #else m_bend = std::wctomb(m_buffer, value); #endif BOOST_ASSERT(-1 != m_bend); BOOST_ASSERT((std::size_t)m_bend <= sizeof(m_buffer)); BOOST_ASSERT(m_bend > 0); m_bnext = 0; } void increment(){ if(++m_bnext < m_bend) return; m_bend = m_bnext = 0; ++(this->base_reference()); m_full = false; } // buffer to handle pending characters int m_bend; int m_bnext; char m_buffer[9]; bool m_full; public: // make composible buy using templated constructor template mb_from_wchar(BOOST_PFTO_WRAPPER(T) start) : super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))), m_bend(0), m_bnext(0), m_full(false) {} // intel 7.1 doesn't like default copy constructor mb_from_wchar(const mb_from_wchar & rhs) : super_t(rhs.base_reference()), m_bend(rhs.m_bend), m_bnext(rhs.m_bnext), m_full(rhs.m_full) {} }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP ostream_iterator.hpp000444000765000024 470512161110661 26021 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP #define BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // ostream_iterator.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // note: this is a custom version of the standard ostream_iterator. // This is necessary as the standard version doesn't work as expected // for wchar_t based streams on systems for which wchar_t not a true // type but rather a synonym for some integer type. #include #include namespace boost { namespace archive { namespace iterators { // given a type, make an input iterator based on a pointer to that type template class ostream_iterator : public boost::iterator_facade< ostream_iterator, Elem, std::output_iterator_tag, ostream_iterator & > { friend class boost::iterator_core_access; typedef ostream_iterator this_t ; typedef Elem char_type; typedef std::basic_ostream ostream_type; //emulate the behavior of std::ostream ostream_iterator & dereference() const { return const_cast(*this); } bool equal(const this_t & rhs) const { return m_ostream == rhs.m_ostream; } void increment(){} protected: ostream_type *m_ostream; void put_val(char_type e){ if(NULL != m_ostream){ m_ostream->put(e); if(! m_ostream->good()) m_ostream = NULL; } } public: this_t & operator=(char_type c){ put_val(c); return *this; } ostream_iterator(ostream_type & os) : m_ostream (& os) {} ostream_iterator() : m_ostream (NULL) {} ostream_iterator(const ostream_iterator & rhs) : m_ostream (rhs.m_ostream) {} }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP remove_whitespace.hpp000444000765000024 1175012161110674 26171 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP #define BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // remove_whitespace.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // for BOOST_DEDUCED_TYPENAME #include #include #include #include //#include //#if ! BOOST_WORKAROUND(BOOST_MSVC, <=1300) // here is the default standard implementation of the functor used // by the filter iterator to remove spaces. Unfortunately usage // of this implementation in combination with spirit trips a bug // VC 6.5. The only way I can find to work around it is to // implement a special non-standard version for this platform #ifndef BOOST_NO_CWCTYPE #include // iswspace #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::iswspace; } #endif #endif #include // isspace #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::isspace; } #endif #if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) // this is required for the RW STL on Linux and Tru64. #undef isspace #undef iswspace #endif //#endif // BOOST_WORKAROUND namespace { // anonymous template struct remove_whitespace_predicate; template<> struct remove_whitespace_predicate { bool operator()(unsigned char t){ return ! std::isspace(t); } }; #ifndef BOOST_NO_CWCHAR template<> struct remove_whitespace_predicate { bool operator()(wchar_t t){ return ! std::iswspace(t); } }; #endif } // namespace anonymous /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // convert base64 file data (including whitespace and padding) to binary namespace boost { namespace archive { namespace iterators { // custom version of filter iterator which doesn't look ahead further than // necessary template class filter_iterator : public boost::iterator_adaptor< filter_iterator, Base, use_default, single_pass_traversal_tag > { friend class boost::iterator_core_access; typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< filter_iterator, Base, use_default, single_pass_traversal_tag > super_t; typedef filter_iterator this_t; typedef BOOST_DEDUCED_TYPENAME super_t::reference reference_type; reference_type dereference_impl(){ if(! m_full){ while(! m_predicate(* this->base_reference())) ++(this->base_reference()); m_full = true; } return * this->base_reference(); } reference_type dereference() const { return const_cast(this)->dereference_impl(); } Predicate m_predicate; bool m_full; public: // note: this function is public only because comeau compiler complained // I don't know if this is because the compiler is wrong or what void increment(){ m_full = false; ++(this->base_reference()); } filter_iterator(Base start) : super_t(start), m_full(false) {} filter_iterator(){} }; template class remove_whitespace : public filter_iterator< remove_whitespace_predicate< BOOST_DEDUCED_TYPENAME boost::iterator_value::type //BOOST_DEDUCED_TYPENAME Base::value_type >, Base > { friend class boost::iterator_core_access; typedef filter_iterator< remove_whitespace_predicate< BOOST_DEDUCED_TYPENAME boost::iterator_value::type //BOOST_DEDUCED_TYPENAME Base::value_type >, Base > super_t; public: // remove_whitespace(){} // why is this needed? // make composible buy using templated constructor template remove_whitespace(BOOST_PFTO_WRAPPER(T) start) : super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))) {} // intel 7.1 doesn't like default copy constructor remove_whitespace(const remove_whitespace & rhs) : super_t(rhs.base_reference()) {} }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP transform_width.hpp000444000765000024 1301412161110616 25661 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP #define BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // transform_width.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. // iterator which takes elements of x bits and returns elements of y bits. // used to change streams of 8 bit characters into streams of 6 bit characters. // and vice-versa for implementing base64 encodeing/decoding. Be very careful // when using and end iterator. end is only reliable detected when the input // stream length is some common multiple of x and y. E.G. Base64 6 bit // character and 8 bit bytes. Lowest common multiple is 24 => 4 6 bit characters // or 3 8 bit characters #include // for BOOST_DEDUCED_TYPENAME & PTFO #include #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // class used by text archives to translate char strings to wchar_t // strings of the currently selected locale template< class Base, int BitsOut, int BitsIn, class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value::type // output character > class transform_width : public boost::iterator_adaptor< transform_width, Base, CharType, single_pass_traversal_tag, CharType > { friend class boost::iterator_core_access; typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< transform_width, Base, CharType, single_pass_traversal_tag, CharType > super_t; typedef transform_width this_t; typedef BOOST_DEDUCED_TYPENAME iterator_value::type base_value_type; void fill(); CharType dereference() const { if(!m_buffer_out_full) const_cast(this)->fill(); return m_buffer_out; } bool equal_impl(const this_t & rhs){ if(BitsIn < BitsOut) // discard any left over bits return this->base_reference() == rhs.base_reference(); else{ // BitsIn > BitsOut // zero fill if(this->base_reference() == rhs.base_reference()){ m_end_of_sequence = true; return 0 == m_remaining_bits; } return false; } } // standard iterator interface bool equal(const this_t & rhs) const { return const_cast(this)->equal_impl(rhs); } void increment(){ m_buffer_out_full = false; } bool m_buffer_out_full; CharType m_buffer_out; // last read element from input base_value_type m_buffer_in; // number of bits to left in the input buffer. unsigned int m_remaining_bits; // flag to indicate we've reached end of data. bool m_end_of_sequence; public: // make composible buy using templated constructor template transform_width(BOOST_PFTO_WRAPPER(T) start) : super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))), m_buffer_out_full(false), m_remaining_bits(0), m_end_of_sequence(false) {} // intel 7.1 doesn't like default copy constructor transform_width(const transform_width & rhs) : super_t(rhs.base_reference()), m_buffer_out_full(rhs.m_buffer_out_full), m_remaining_bits(rhs.m_remaining_bits), m_buffer_in(rhs.m_buffer_in), m_end_of_sequence(false) {} }; template< class Base, int BitsOut, int BitsIn, class CharType > void transform_width::fill() { unsigned int missing_bits = BitsOut; m_buffer_out = 0; do{ if(0 == m_remaining_bits){ if(m_end_of_sequence){ m_buffer_in = 0; m_remaining_bits = missing_bits; } else{ m_buffer_in = * this->base_reference()++; m_remaining_bits = BitsIn; } } // append these bits to the next output // up to the size of the output unsigned int i = std::min(missing_bits, m_remaining_bits); // shift interesting bits to least significant position base_value_type j = m_buffer_in >> (m_remaining_bits - i); // and mask off the un interesting higher bits // note presumption of twos complement notation j &= (1 << i) - 1; // append then interesting bits to the output value m_buffer_out <<= i; m_buffer_out |= j; // and update counters missing_bits -= i; m_remaining_bits -= i; }while(0 < missing_bits); m_buffer_out_full = true; } } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP unescape.hpp000444000765000024 514412161110623 24235 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP #define BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // unescape.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // for BOOST_DEDUCED_TYPENAME #include //#include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // class used by text archives to translate char strings to wchar_t // strings of the currently selected locale template class unescape : public boost::iterator_adaptor< unescape, Base, BOOST_DEDUCED_TYPENAME pointee::type, single_pass_traversal_tag, BOOST_DEDUCED_TYPENAME pointee::type > { friend class boost::iterator_core_access; typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< unescape, Base, BOOST_DEDUCED_TYPENAME pointee::type, single_pass_traversal_tag, BOOST_DEDUCED_TYPENAME pointee::type > super_t; typedef unescape this_t; public: typedef BOOST_DEDUCED_TYPENAME this_t::value_type value_type; typedef BOOST_DEDUCED_TYPENAME this_t::reference reference; private: value_type dereference_impl() { if(! m_full){ m_current_value = static_cast(this)->drain(); m_full = true; } return m_current_value; } reference dereference() const { return const_cast(this)->dereference_impl(); } value_type m_current_value; bool m_full; void increment(){ ++(this->base_reference()); dereference_impl(); m_full = false; }; public: unescape(Base base) : super_t(base), m_full(false) {} }; } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP wchar_from_mb.hpp000444000765000024 705612161110606 25244 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP #define BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // wchar_from_mb.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include // size_t #include // mblen #include // for BOOST_DEDUCED_TYPENAME #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::mblen; using ::mbtowc; } // namespace std #endif #include #include #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // class used by text archives to translate char strings to wchar_t // strings of the currently selected locale template class wchar_from_mb : public boost::iterator_adaptor< wchar_from_mb, Base, wchar_t, single_pass_traversal_tag, wchar_t > { friend class boost::iterator_core_access; typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor< wchar_from_mb, Base, wchar_t, single_pass_traversal_tag, wchar_t > super_t; typedef wchar_from_mb this_t; wchar_t drain(); wchar_t dereference_impl() { if(! m_full){ m_current_value = drain(); m_full = true; } return m_current_value; } wchar_t dereference() const { return const_cast(this)->dereference_impl(); } void increment(){ dereference_impl(); m_full = false; ++(this->base_reference()); }; wchar_t m_current_value; bool m_full; public: // make composible buy using templated constructor template wchar_from_mb(BOOST_PFTO_WRAPPER(T) start) : super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))), m_full(false) {} // intel 7.1 doesn't like default copy constructor wchar_from_mb(const wchar_from_mb & rhs) : super_t(rhs.base_reference()), m_full(rhs.m_full) {} }; template wchar_t wchar_from_mb::drain(){ char buffer[9]; char * bptr = buffer; char val; for(std::size_t i = 0; i++ < (unsigned)MB_CUR_MAX;){ val = * this->base_reference(); *bptr++ = val; int result = std::mblen(buffer, i); if(-1 != result) break; ++(this->base_reference()); } wchar_t retval; int result = std::mbtowc(& retval, buffer, MB_CUR_MAX); if(0 >= result) boost::serialization::throw_exception(iterators::dataflow_exception( iterators::dataflow_exception::invalid_conversion )); return retval; } } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP xml_escape.hpp000444000765000024 617312161110642 24556 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP #define BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_escape.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // for BOOST_DEDUCED_TYPENAME #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // insert escapes into xml text template class xml_escape : public escape, Base> { friend class boost::iterator_core_access; typedef escape, Base> super_t; public: char fill(const char * & bstart, const char * & bend); wchar_t fill(const wchar_t * & bstart, const wchar_t * & bend); template xml_escape(BOOST_PFTO_WRAPPER(T) start) : super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))) {} // intel 7.1 doesn't like default copy constructor xml_escape(const xml_escape & rhs) : super_t(rhs.base_reference()) {} }; template char xml_escape::fill( const char * & bstart, const char * & bend ){ char current_value = * this->base_reference(); switch(current_value){ case '<': bstart = "<"; bend = bstart + 4; break; case '>': bstart = ">"; bend = bstart + 4; break; case '&': bstart = "&"; bend = bstart + 5; break; case '"': bstart = """; bend = bstart + 6; break; case '\'': bstart = "'"; bend = bstart + 6; break; default: return current_value; } return *bstart; } template wchar_t xml_escape::fill( const wchar_t * & bstart, const wchar_t * & bend ){ wchar_t current_value = * this->base_reference(); switch(current_value){ case '<': bstart = L"<"; bend = bstart + 4; break; case '>': bstart = L">"; bend = bstart + 4; break; case '&': bstart = L"&"; bend = bstart + 5; break; case '"': bstart = L"""; bend = bstart + 6; break; case '\'': bstart = L"'"; bend = bstart + 6; break; default: return current_value; } return *bstart; } } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP xml_unescape.hpp000444000765000024 751512161110637 25126 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/archive/iterators#ifndef BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP #define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // xml_unescape.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include // for BOOST_DEDUCED_TYPENAME #include #include #include #include namespace boost { namespace archive { namespace iterators { /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // replace &??? xml escape sequences with the corresponding characters template class xml_unescape : public unescape, Base> { friend class boost::iterator_core_access; typedef xml_unescape this_t; typedef unescape super_t; typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference reference_type; reference_type dereference() const { return unescape, Base>::dereference(); } public: // workaround msvc 7.1 ICU crash #if defined(BOOST_MSVC) typedef int value_type; #else typedef BOOST_DEDUCED_TYPENAME this_t::value_type value_type; #endif void drain_residue(const char *literal); value_type drain(); template xml_unescape(BOOST_PFTO_WRAPPER(T) start) : super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))) {} // intel 7.1 doesn't like default copy constructor xml_unescape(const xml_unescape & rhs) : super_t(rhs.base_reference()) {} }; template void xml_unescape::drain_residue(const char * literal){ do{ if(* literal != * ++(this->base_reference())) boost::serialization::throw_exception( dataflow_exception( dataflow_exception::invalid_xml_escape_sequence ) ); } while('\0' != * ++literal); } // note key constraint on this function is that can't "look ahead" any // more than necessary into base iterator. Doing so would alter the base // iterator refenence which would make subsequent iterator comparisons // incorrect and thereby break the composiblity of iterators. template BOOST_DEDUCED_TYPENAME xml_unescape::value_type //int xml_unescape::drain(){ value_type retval = * this->base_reference(); if('&' != retval){ return retval; } retval = * ++(this->base_reference()); switch(retval){ case 'l': // < drain_residue("t;"); retval = '<'; break; case 'g': // > drain_residue("t;"); retval = '>'; break; case 'a': retval = * ++(this->base_reference()); switch(retval){ case 'p': // ' drain_residue("os;"); retval = '\''; break; case 'm': // & drain_residue("p;"); retval = '&'; break; } break; case 'q': drain_residue("uot;"); retval = '"'; break; } return retval; } } // namespace iterators } // namespace archive } // namespace boost #endif // BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP assign000755000765000024 012161110675 17416 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostassignment_exception.hpp000444000765000024 174712161110675 24523 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_ASSIGNMENT_EXCEPTION_HPP #define BOOST_ASSIGN_ASSIGNMENT_EXCEPTION_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include namespace boost { namespace assign { class assignment_exception : public std::exception { public: assignment_exception( const char* _what ) : what_( _what ) { } virtual const char* what() const throw() { return what_; } private: const char* what_; }; } } #endif list_inserter.hpp000444000765000024 2526112161110666 23200 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_LIST_INSERTER_HPP #define BOOST_ASSIGN_LIST_INSERTER_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace assign_detail { template< class T > struct repeater { std::size_t sz; T val; repeater( std::size_t sz_, T r ) : sz( sz_ ), val( r ) { } }; template< class Fun > struct fun_repeater { std::size_t sz; Fun val; fun_repeater( std::size_t sz_, Fun r ) : sz( sz_ ), val( r ) { } }; template< class C > class call_push_back { C& c_; public: call_push_back( C& c ) : c_( c ) { } template< class T > void operator()( T r ) { c_.push_back( r ); } }; template< class C > class call_push_front { C& c_; public: call_push_front( C& c ) : c_( c ) { } template< class T > void operator()( T r ) { c_.push_front( r ); } }; template< class C > class call_push { C& c_; public: call_push( C& c ) : c_( c ) { } template< class T > void operator()( T r ) { c_.push( r ); } }; template< class C > class call_insert { C& c_; public: call_insert( C& c ) : c_( c ) { } template< class T > void operator()( T r ) { c_.insert( r ); } }; template< class C > class call_add_edge { C& c_; public: call_add_edge( C& c ) : c_(c) { } template< class T > void operator()( T l, T r ) { add_edge( l, r, c_ ); } template< class T, class EP > void operator()( T l, T r, const EP& ep ) { add_edge( l, r, ep, c_ ); } }; struct forward_n_arguments {}; } // namespace 'assign_detail' namespace assign { template< class T > inline assign_detail::repeater repeat( std::size_t sz, T r ) { return assign_detail::repeater( sz, r ); } template< class Function > inline assign_detail::fun_repeater repeat_fun( std::size_t sz, Function r ) { return assign_detail::fun_repeater( sz, r ); } template< class Function, class Argument = assign_detail::forward_n_arguments > class list_inserter { struct single_arg_type {}; struct n_arg_type {}; typedef BOOST_DEDUCED_TYPENAME mpl::if_c< is_same::value, n_arg_type, single_arg_type >::type arg_type; public: list_inserter( Function fun ) : insert_( fun ) {} template< class Function2, class Arg > list_inserter( const list_inserter& r ) : insert_( r.fun_private() ) {} list_inserter( const list_inserter& r ) : insert_( r.insert_ ) {} list_inserter& operator()() { insert_( Argument() ); return *this; } template< class T > list_inserter& operator=( const T& r ) { insert_( r ); return *this; } template< class T > list_inserter& operator=( assign_detail::repeater r ) { return operator,( r ); } template< class Nullary_function > list_inserter& operator=( const assign_detail::fun_repeater& r ) { return operator,( r ); } template< class T > list_inserter& operator,( const T& r ) { insert_( r ); return *this; } #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) template< class T > list_inserter& operator,( const assign_detail::repeater & r ) { return repeat( r.sz, r.val ); } #else template< class T > list_inserter& operator,( assign_detail::repeater r ) { return repeat( r.sz, r.val ); } #endif template< class Nullary_function > list_inserter& operator,( const assign_detail::fun_repeater& r ) { return repeat_fun( r.sz, r.val ); } template< class T > list_inserter& repeat( std::size_t sz, T r ) { std::size_t i = 0; while( i++ != sz ) insert_( r ); return *this; } template< class Nullary_function > list_inserter& repeat_fun( std::size_t sz, Nullary_function fun ) { std::size_t i = 0; while( i++ != sz ) insert_( fun() ); return *this; } template< class SinglePassIterator > list_inserter& range( SinglePassIterator first, SinglePassIterator last ) { for( ; first != last; ++first ) insert_( *first ); return *this; } template< class SinglePassRange > list_inserter& range( const SinglePassRange& r ) { return range( boost::begin(r), boost::end(r) ); } template< class T > list_inserter& operator()( const T& t ) { insert_( t ); return *this; } #ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value #define BOOST_ASSIGN_MAX_PARAMS 5 #endif #define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1) #define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class T) #define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& t) #define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, t) #define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS) #define BOOST_PP_LOCAL_MACRO(n) \ template< class T, BOOST_ASSIGN_PARAMS1(n) > \ list_inserter& operator()(T t, BOOST_ASSIGN_PARAMS2(n) ) \ { \ BOOST_PP_CAT(insert, BOOST_PP_INC(n))(t, BOOST_ASSIGN_PARAMS3(n), arg_type()); \ return *this; \ } \ /**/ #include BOOST_PP_LOCAL_ITERATE() #define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS) #define BOOST_PP_LOCAL_MACRO(n) \ template< class T, BOOST_ASSIGN_PARAMS1(n) > \ void BOOST_PP_CAT(insert, BOOST_PP_INC(n))(T const& t, BOOST_ASSIGN_PARAMS2(n), single_arg_type) \ { \ insert_( Argument(t, BOOST_ASSIGN_PARAMS3(n) )); \ } \ /**/ #include BOOST_PP_LOCAL_ITERATE() #define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS) #define BOOST_PP_LOCAL_MACRO(n) \ template< class T, BOOST_ASSIGN_PARAMS1(n) > \ void BOOST_PP_CAT(insert, BOOST_PP_INC(n))(T const& t, BOOST_ASSIGN_PARAMS2(n), n_arg_type) \ { \ insert_(t, BOOST_ASSIGN_PARAMS3(n) ); \ } \ /**/ #include BOOST_PP_LOCAL_ITERATE() Function fun_private() const { return insert_; } private: list_inserter& operator=( const list_inserter& ); Function insert_; }; template< class Function > inline list_inserter< Function > make_list_inserter( Function fun ) { return list_inserter< Function >( fun ); } template< class Function, class Argument > inline list_inserter make_list_inserter( Function fun, Argument* ) { return list_inserter( fun ); } template< class C > inline list_inserter< assign_detail::call_push_back, BOOST_DEDUCED_TYPENAME C::value_type > push_back( C& c ) { static BOOST_DEDUCED_TYPENAME C::value_type* p = 0; return make_list_inserter( assign_detail::call_push_back( c ), p ); } template< class C > inline list_inserter< assign_detail::call_push_front, BOOST_DEDUCED_TYPENAME C::value_type > push_front( C& c ) { static BOOST_DEDUCED_TYPENAME C::value_type* p = 0; return make_list_inserter( assign_detail::call_push_front( c ), p ); } template< class C > inline list_inserter< assign_detail::call_insert, BOOST_DEDUCED_TYPENAME C::value_type > insert( C& c ) { static BOOST_DEDUCED_TYPENAME C::value_type* p = 0; return make_list_inserter( assign_detail::call_insert( c ), p ); } template< class C > inline list_inserter< assign_detail::call_push, BOOST_DEDUCED_TYPENAME C::value_type > push( C& c ) { static BOOST_DEDUCED_TYPENAME C::value_type* p = 0; return make_list_inserter( assign_detail::call_push( c ), p ); } template< class C > inline list_inserter< assign_detail::call_add_edge > add_edge( C& c ) { return make_list_inserter( assign_detail::call_add_edge( c ) ); } } // namespace 'assign' } // namespace 'boost' #undef BOOST_ASSIGN_PARAMS1 #undef BOOST_ASSIGN_PARAMS2 #undef BOOST_ASSIGN_PARAMS3 #undef BOOST_ASSIGN_MAX_PARAMETERS #endif list_of.hpp000444000765000024 5016012161110672 21742 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_LIST_OF_HPP #define BOOST_ASSIGN_LIST_OF_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) // BCB requires full type definition for is_array<> to work correctly. #include #endif namespace boost { // this here is necessary to avoid compiler error in #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) template< class T, std::size_t sz > class array; #endif namespace assign_detail { ///////////////////////////////////////////////////////////////////////// // Part 0: common conversion code ///////////////////////////////////////////////////////////////////////// template< class T > struct assign_decay { // // Add constness to array parameters // to support string literals properly // typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< ::boost::is_array, ::boost::decay, ::boost::decay >::type type; }; template< class T, std::size_t sz > type_traits::yes_type assign_is_array( const array* ); type_traits::no_type assign_is_array( ... ); template< class T, class U > type_traits::yes_type assign_is_pair( const std::pair* ); type_traits::no_type assign_is_pair( ... ); struct array_type_tag { #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) private: char dummy_; // BCB would by default use 8 bytes #endif }; struct adapter_type_tag { #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) private: char dummy_; // BCB would by default use 8 bytes #endif }; struct pair_type_tag { #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) private: char dummy_; // BCB would by default use 8 bytes #endif }; struct default_type_tag { #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) private: char dummy_; // BCB would by default use 8 bytes #endif }; template< class DerivedTAssign, class Iterator > class converter { public: // Range operations typedef Iterator iterator; typedef Iterator const_iterator; iterator begin() const { return static_cast(this)->begin(); } iterator end() const { return static_cast(this)->end(); } public: template< class Container > Container convert_to_container() const { static Container* c = 0; BOOST_STATIC_CONSTANT( bool, is_array_flag = sizeof( assign_detail::assign_is_array( c ) ) == sizeof( type_traits::yes_type ) ); typedef BOOST_DEDUCED_TYPENAME mpl::if_c< is_array_flag, array_type_tag, default_type_tag >::type tag_type; return convert( c, tag_type() ); } private: template< class Container > Container convert( const Container*, default_type_tag ) const { #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // old Dinkumware doesn't support iterator type as template Container result; iterator it = begin(), e = end(); while( it != e ) { result.insert( result.end(), *it ); ++it; } return result; #else return Container( begin(), end() ); #endif } template< class Array > Array convert( const Array*, array_type_tag ) const { typedef BOOST_DEDUCED_TYPENAME Array::value_type value_type; #if BOOST_WORKAROUND(BOOST_INTEL, <= 910 ) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580 ) BOOST_DEDUCED_TYPENAME remove_const::type ar; #else Array ar; #endif const std::size_t sz = ar.size(); if( sz < static_cast(this)->size() ) throw assign::assignment_exception( "array initialized with too many elements" ); std::size_t n = 0; iterator i = begin(), e = end(); for( ; i != e; ++i, ++n ) ar[n] = *i; for( ; n < sz; ++n ) ar[n] = value_type(); return ar; } template< class Adapter > Adapter convert_to_adapter( const Adapter* = 0 ) const { Adapter a; iterator i = begin(), e = end(); for( ; i != e; ++i ) a.push( *i ); return a; } private: struct adapter_converter; friend struct adapter_converter; struct adapter_converter { const converter& gl; adapter_converter( const converter& this_ ) : gl( this_ ) {} adapter_converter( const adapter_converter& r ) : gl( r.gl ) { } template< class Adapter > operator Adapter() const { return gl.convert_to_adapter(); } }; public: template< class Container > Container to_container( Container& c ) const { return convert( &c, default_type_tag() ); } adapter_converter to_adapter() const { return adapter_converter( *this ); } template< class Adapter > Adapter to_adapter( Adapter& a ) const { return this->convert_to_adapter( &a ); } template< class Array > Array to_array( Array& a ) const { return convert( &a, array_type_tag() ); } }; template< class T, class I, class Range > inline bool operator==( const converter& l, const Range& r ) { return ::boost::iterator_range_detail::equal( l, r ); } template< class T, class I, class Range > inline bool operator==( const Range& l, const converter& r ) { return r == l; } template< class T, class I, class Range > inline bool operator!=( const converter& l, const Range& r ) { return !( l == r ); } template< class T, class I, class Range > inline bool operator!=( const Range& l, const converter& r ) { return !( l == r ); } template< class T, class I, class Range > inline bool operator<( const converter& l, const Range& r ) { return ::boost::iterator_range_detail::less_than( l, r ); } template< class T, class I, class Range > inline bool operator<( const Range& l, const converter& r ) { return ::boost::iterator_range_detail::less_than( l, r ); } template< class T, class I, class Range > inline bool operator>( const converter& l, const Range& r ) { return r < l; } template< class T, class I, class Range > inline bool operator>( const Range& l, const converter& r ) { return r < l; } template< class T, class I, class Range > inline bool operator<=( const converter& l, const Range& r ) { return !( l > r ); } template< class T, class I, class Range > inline bool operator<=( const Range& l, const converter& r ) { return !( l > r ); } template< class T, class I, class Range > inline bool operator>=( const converter& l, const Range& r ) { return !( l < r ); } template< class T, class I, class Range > inline bool operator>=( const Range& l, const converter& r ) { return !( l < r ); } template< class T, class I, class Elem, class Traits > inline std::basic_ostream& operator<<( std::basic_ostream& Os, const converter& r ) { return Os << ::boost::make_iterator_range( r.begin(), r.end() ); } ///////////////////////////////////////////////////////////////////////// // Part 1: flexible, but inefficient interface ///////////////////////////////////////////////////////////////////////// template< class T > class generic_list : public converter< generic_list< BOOST_DEDUCED_TYPENAME assign_decay::type >, BOOST_DEDUCED_TYPENAME std::deque::type>::iterator > { typedef BOOST_DEDUCED_TYPENAME assign_decay::type Ty; typedef std::deque impl_type; mutable impl_type values_; public: typedef BOOST_DEDUCED_TYPENAME impl_type::iterator iterator; typedef iterator const_iterator; typedef BOOST_DEDUCED_TYPENAME impl_type::value_type value_type; typedef BOOST_DEDUCED_TYPENAME impl_type::size_type size_type; typedef BOOST_DEDUCED_TYPENAME impl_type::difference_type difference_type; public: iterator begin() const { return values_.begin(); } iterator end() const { return values_.end(); } bool empty() const { return values_.empty(); } size_type size() const { return values_.size(); } private: void push_back( value_type r ) { values_.push_back( r ); } public: generic_list& operator,( const Ty& u ) { this->push_back( u ); return *this; } generic_list& operator()() { this->push_back( Ty() ); return *this; } generic_list& operator()( const Ty& u ) { this->push_back( u ); return *this; } #ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value #define BOOST_ASSIGN_MAX_PARAMS 5 #endif #define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1) #define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class U) #define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, U, const& u) #define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, u) #define BOOST_ASSIGN_PARAMS4(n) BOOST_PP_ENUM_PARAMS(n, U) #define BOOST_ASSIGN_PARAMS2_NO_REF(n) BOOST_PP_ENUM_BINARY_PARAMS(n, U, u) #define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS) #define BOOST_PP_LOCAL_MACRO(n) \ template< class U, BOOST_ASSIGN_PARAMS1(n) > \ generic_list& operator()(U const& u, BOOST_ASSIGN_PARAMS2(n) ) \ { \ this->push_back( Ty(u, BOOST_ASSIGN_PARAMS3(n))); \ return *this; \ } \ /**/ #include BOOST_PP_LOCAL_ITERATE() template< class U > generic_list& repeat( std::size_t sz, U u ) { std::size_t i = 0; while( i++ != sz ) this->push_back( u ); return *this; } template< class Nullary_function > generic_list& repeat_fun( std::size_t sz, Nullary_function fun ) { std::size_t i = 0; while( i++ != sz ) this->push_back( fun() ); return *this; } template< class SinglePassIterator > generic_list& range( SinglePassIterator first, SinglePassIterator last ) { for( ; first != last; ++first ) this->push_back( *first ); return *this; } template< class SinglePassRange > generic_list& range( const SinglePassRange& r ) { return range( boost::begin(r), boost::end(r) ); } template< class Container > operator Container() const { return this-> BOOST_NESTED_TEMPLATE convert_to_container(); } }; ///////////////////////////////////////////////////////////////////////// // Part 2: efficient, but inconvenient interface ///////////////////////////////////////////////////////////////////////// template< class T > struct assign_reference { assign_reference() { /* intentionally empty */ } assign_reference( T& r ) : ref_(&r) { } void operator=( T& r ) { ref_ = &r; } operator T&() const { return *ref_; } void swap( assign_reference& r ) { std::swap( *ref_, *r.ref_ ); } T& get_ref() const { return *ref_; } private: T* ref_; }; template< class T > inline bool operator<( const assign_reference& l, const assign_reference& r ) { return l.get_ref() < r.get_ref(); } template< class T > inline bool operator>( const assign_reference& l, const assign_reference& r ) { return l.get_ref() > r.get_ref(); } template< class T > inline void swap( assign_reference& l, assign_reference& r ) { l.swap( r ); } template< class T, int N > struct static_generic_list : public converter< static_generic_list, assign_reference* > { private: typedef T internal_value_type; public: typedef assign_reference value_type; typedef value_type* iterator; typedef value_type* const_iterator; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; static_generic_list( T& r ) : current_(1) { refs_[0] = r; } static_generic_list& operator()( T& r ) { insert( r ); return *this; } iterator begin() const { return &refs_[0]; } iterator end() const { return &refs_[current_]; } size_type size() const { return static_cast( current_ ); } bool empty() const { return false; } template< class ForwardIterator > static_generic_list& range( ForwardIterator first, ForwardIterator last ) { for( ; first != last; ++first ) this->insert( *first ); return *this; } template< class ForwardRange > static_generic_list& range( ForwardRange& r ) { return range( boost::begin(r), boost::end(r) ); } template< class ForwardRange > static_generic_list& range( const ForwardRange& r ) { return range( boost::begin(r), boost::end(r) ); } template< class Container > operator Container() const { return this-> BOOST_NESTED_TEMPLATE convert_to_container(); } private: void insert( T& r ) { refs_[current_] = r; ++current_; } static_generic_list(); mutable assign_reference refs_[N]; int current_; }; } // namespace 'assign_detail' namespace assign { template< class T > inline assign_detail::generic_list list_of() { return assign_detail::generic_list()( T() ); } template< class T > inline assign_detail::generic_list list_of( const T& t ) { return assign_detail::generic_list()( t ); } template< int N, class T > inline assign_detail::static_generic_list< BOOST_DEDUCED_TYPENAME assign_detail::assign_decay::type,N> ref_list_of( T& t ) { return assign_detail::static_generic_list::type,N>( t ); } template< int N, class T > inline assign_detail::static_generic_list::type,N> cref_list_of( const T& t ) { return assign_detail::static_generic_list::type,N>( t ); } #define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS) #define BOOST_PP_LOCAL_MACRO(n) \ template< class T, class U, BOOST_ASSIGN_PARAMS1(n) > \ inline assign_detail::generic_list \ list_of(U const& u, BOOST_ASSIGN_PARAMS2(n) ) \ { \ return assign_detail::generic_list()(u, BOOST_ASSIGN_PARAMS3(n)); \ } \ /**/ #include BOOST_PP_LOCAL_ITERATE() #define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS) #define BOOST_PP_LOCAL_MACRO(n) \ template< class U, BOOST_ASSIGN_PARAMS1(n) > \ inline assign_detail::generic_list< tuple > \ tuple_list_of(U u, BOOST_ASSIGN_PARAMS2_NO_REF(n) ) \ { \ return assign_detail::generic_list< tuple >()( tuple( u, BOOST_ASSIGN_PARAMS3(n) )); \ } \ /**/ #include BOOST_PP_LOCAL_ITERATE() template< class Key, class T > inline assign_detail::generic_list< std::pair < BOOST_DEDUCED_TYPENAME assign_detail::assign_decay::type, BOOST_DEDUCED_TYPENAME assign_detail::assign_decay::type > > map_list_of( const Key& k, const T& t ) { typedef BOOST_DEDUCED_TYPENAME assign_detail::assign_decay::type k_type; typedef BOOST_DEDUCED_TYPENAME assign_detail::assign_decay::type t_type; return assign_detail::generic_list< std::pair >()( k, t ); } template< class F, class S > inline assign_detail::generic_list< std::pair < BOOST_DEDUCED_TYPENAME assign_detail::assign_decay::type, BOOST_DEDUCED_TYPENAME assign_detail::assign_decay::type > > pair_list_of( const F& f, const S& s ) { return map_list_of( f, s ); } } // namespace 'assign' } // namespace 'boost' #undef BOOST_ASSIGN_PARAMS1 #undef BOOST_ASSIGN_PARAMS2 #undef BOOST_ASSIGN_PARAMS3 #undef BOOST_ASSIGN_PARAMS4 #undef BOOST_ASSIGN_PARAMS2_NO_REF #undef BOOST_ASSIGN_MAX_PARAMETERS #endif std.hpp000444000765000024 142512161110601 21045 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_HPP #define BOOST_ASSIGN_STD_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include #include #include #include #include #include #endif std000755000765000024 012161110701 20176 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assigndeque.hpp000444000765000024 154312161110666 22164 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign/std// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_DEQUE_HPP #define BOOST_ASSIGN_STD_DEQUE_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include namespace boost { namespace assign { template< class V, class A, class V2 > inline list_inserter< assign_detail::call_push_back< std::deque >, V > operator+=( std::deque& c, V2 v ) { return push_back( c )( v ); } } } #endif list.hpp000444000765000024 153112161110701 22017 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign/std// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_LIST_HPP #define BOOST_ASSIGN_STD_LIST_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include namespace boost { namespace assign { template< class V, class A, class V2 > inline list_inserter< assign_detail::call_push_back< std::list >, V > operator+=( std::list& c, V2 v ) { return push_back( c )( v ); } } } #endif map.hpp000444000765000024 215212161110661 21626 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign/std// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_MAP_HPP #define BOOST_ASSIGN_STD_MAP_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include namespace boost { namespace assign { template< class K, class V, class C, class A, class P > inline list_inserter< assign_detail::call_insert< std::map >, P > operator+=( std::map& m, const P& p ) { return insert( m )( p ); } template< class K, class V, class C, class A, class P > inline list_inserter< assign_detail::call_insert< std::multimap >, P > operator+=( std::multimap& m, const P& p ) { return insert( m )( p ); } } } #endif queue.hpp000444000765000024 207212161110621 22172 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign/std// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_QUEUE_HPP #define BOOST_ASSIGN_STD_QUEUE_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include namespace boost { namespace assign { template< class V, class C, class V2 > inline list_inserter< assign_detail::call_push< std::queue >, V > operator+=( std::queue& c, V2 v ) { return push( c )( v ); } template< class V, class C, class V2 > inline list_inserter< assign_detail::call_push< std::priority_queue >, V > operator+=( std::priority_queue& c, V2 v ) { return push( c )( v ); } } } #endif set.hpp000444000765000024 211212161110647 21644 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign/std// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_SET_HPP #define BOOST_ASSIGN_STD_SET_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include namespace boost { namespace assign { template< class K, class C, class A, class K2 > inline list_inserter< assign_detail::call_insert< std::set >, K > operator+=( std::set& c, K2 k ) { return insert( c )( k ); } template< class K, class C, class A, class K2 > inline list_inserter< assign_detail::call_insert< std::multiset >, K > operator+=( std::multiset& c, K2 k ) { return insert( c )( k ); } } } #endif slist.hpp000444000765000024 202112161110623 22200 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign/std// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_SLIST_HPP #define BOOST_ASSIGN_STD_SLIST_HPP #include #ifdef BOOST_HAS_SLIST #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #ifdef BOOST_SLIST_HEADER # include BOOST_SLIST_HEADER #else # include #endif namespace boost { namespace assign { template< class V, class A, class V2 > inline list_inserter< assign_detail::call_push_back< BOOST_STD_EXTENSION_NAMESPACE::slist >, V > operator+=( BOOST_STD_EXTENSION_NAMESPACE::slist& c, V2 v ) { return push_back( c )( v ); } } } #endif // BOOST_HAS_SLIST #endif stack.hpp000444000765000024 152112161110604 22152 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign/std// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_STACK_HPP #define BOOST_ASSIGN_STD_STACK_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include namespace boost { namespace assign { template< class V, class C, class V2 > inline list_inserter< assign_detail::call_push< std::stack >, V > operator+=( std::stack& c, V2 v ) { return push( c )( v ); } } } #endif vector.hpp000444000765000024 154212161110655 22360 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/assign/std// Boost.Assign library // // Copyright Thorsten Ottosen 2003-2004. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/assign/ // #ifndef BOOST_ASSIGN_STD_VECTOR_HPP #define BOOST_ASSIGN_STD_VECTOR_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include namespace boost { namespace assign { template< class V, class A, class V2 > inline list_inserter< assign_detail::call_push_back< std::vector >, V > operator+=( std::vector& c, V2 v ) { return push_back( c )( v ); } } } #endif bind000755000765000024 012161110676 17047 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostarg.hpp000444000765000024 243012161110603 20453 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind#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 bind.hpp000444000765000024 16346412161110612 20675 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind#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 bind_cc.hpp000444000765000024 1361112161110642 21311 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind// // 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)); } bind_mf2_cc.hpp000444000765000024 2645612161110676 22077 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind// // 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)); } bind_mf_cc.hpp000444000765000024 2530012161110667 22000 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind// // 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)); } bind_template.hpp000444000765000024 3412012161110620 22531 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind// // 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_; mem_fn.hpp000444000765000024 1641612161110646 21203 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind#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 mem_fn_cc.hpp000444000765000024 1145312161110643 21641 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind// // 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); } mem_fn_template.hpp000444000765000024 6567012161110646 23104 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind// // 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 mem_fn_vw.hpp000444000765000024 1762212161110620 21707 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind// // 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) {} }; placeholders.hpp000444000765000024 365012161110675 22365 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind#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 protect.hpp000444000765000024 2343012161110620 21404 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind#ifndef BOOST_BIND_PROTECT_HPP_INCLUDED #define BOOST_BIND_PROTECT_HPP_INCLUDED // // protect.hpp // // Copyright (c) 2002 Peter Dimov and Multi Media Ltd. // Copyright (c) 2009 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) // #include #include namespace boost { namespace _bi { template class protected_bind_t { public: typedef typename F::result_type result_type; explicit protected_bind_t(F f): f_(f) { } result_type operator()() { return f_(); } result_type operator()() const { return f_(); } template result_type operator()(A1 & a1) { return f_(a1); } template result_type operator()(A1 & a1) const { return f_(a1); } #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) template result_type operator()(const A1 & a1) { return f_(a1); } template result_type operator()(const A1 & a1) const { return f_(a1); } #endif template result_type operator()(A1 & a1, A2 & a2) { return f_(a1, a2); } template result_type operator()(A1 & a1, A2 & a2) const { return f_(a1, a2); } #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) template result_type operator()(A1 const & a1, A2 & a2) { return f_(a1, a2); } template result_type operator()(A1 const & a1, A2 & a2) const { return f_(a1, a2); } template result_type operator()(A1 & a1, A2 const & a2) { return f_(a1, a2); } template result_type operator()(A1 & a1, A2 const & a2) const { return f_(a1, a2); } template result_type operator()(A1 const & a1, A2 const & a2) { return f_(a1, a2); } template result_type operator()(A1 const & a1, A2 const & a2) const { return f_(a1, a2); } #endif template result_type operator()(A1 & a1, A2 & a2, A3 & a3) { return f_(a1, a2, a3); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3) const { return f_(a1, a2, a3); } #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) { return f_(a1, a2, a3); } template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const { return f_(a1, a2, a3); } #endif template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) { return f_(a1, a2, a3, a4); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const { return f_(a1, a2, a3, a4); } #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) { return f_(a1, a2, a3, a4); } template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) const { return f_(a1, a2, a3, a4); } #endif template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) { return f_(a1, a2, a3, a4, a5); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const { return f_(a1, a2, a3, a4, a5); } #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) { return f_(a1, a2, a3, a4, a5); } template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) const { return f_(a1, a2, a3, a4, a5); } #endif template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) { return f_(a1, a2, a3, a4, a5, a6); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const { return f_(a1, a2, a3, a4, a5, a6); } #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) { return f_(a1, a2, a3, a4, a5, a6); } template result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) const { return f_(a1, a2, a3, a4, a5, a6); } #endif template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) { return f_(a1, a2, a3, a4, a5, a6, a7); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const { return f_(a1, a2, a3, a4, a5, a6, a7); } #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) { return f_(a1, a2, a3, a4, a5, a6, a7); } 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 { return f_(a1, a2, a3, a4, a5, a6, a7); } #endif template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) { return f_(a1, a2, a3, a4, a5, a6, a7, a8); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const { return f_(a1, a2, a3, a4, a5, a6, a7, a8); } #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) { return f_(a1, a2, a3, a4, a5, a6, a7, a8); } 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 { return f_(a1, a2, a3, a4, a5, a6, a7, a8); } #endif template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) { return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const { return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9); } #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) { return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9); } 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 { return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9); } #endif private: F f_; }; } // namespace _bi template _bi::protected_bind_t protect(F f) { return _bi::protected_bind_t(f); } } // namespace boost #endif // #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED storage.hpp000444000765000024 3302712161110640 21375 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/bind#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 concept000755000765000024 012161110677 17567 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostassert.hpp000444000765000024 356612161110640 21736 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept// 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 requires.hpp000444000765000024 551712161110677 22304 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept// 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_REQUIRES_DWA2006430_HPP # define BOOST_CONCEPT_REQUIRES_DWA2006430_HPP # include # include # include # include namespace boost { // Template for use in handwritten assertions template struct requires_ : More { # if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) typedef typename More::type type; # endif BOOST_CONCEPT_ASSERT((Model)); }; // Template for use by macros, where models must be wrapped in parens. // This isn't in namespace detail to keep extra cruft out of resulting // error messages. template struct _requires_ { enum { value = 0 }; BOOST_CONCEPT_ASSERT_FN(ModelFn); }; template struct Requires_ : ::boost::parameter::aux::unaryfunptr_arg_type { # if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) typedef typename ::boost::parameter::aux::unaryfunptr_arg_type::type type; # endif }; # if BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(1010)) # define BOOST_CONCEPT_REQUIRES_(r,data,t) | (::boost::_requires_::value) # else # define BOOST_CONCEPT_REQUIRES_(r,data,t) + (::boost::_requires_::value) # endif #if defined(NDEBUG) || BOOST_WORKAROUND(BOOST_MSVC, < 1300) # define BOOST_CONCEPT_REQUIRES(models, result) \ typename ::boost::parameter::aux::unaryfunptr_arg_type::type #elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) // Same thing as below without the initial typename # define BOOST_CONCEPT_REQUIRES(models, result) \ ::boost::Requires_< \ (0 BOOST_PP_SEQ_FOR_EACH(BOOST_CONCEPT_REQUIRES_, ~, models)), \ ::boost::parameter::aux::unaryfunptr_arg_type \ >::type #else // This just ICEs on MSVC6 :( # define BOOST_CONCEPT_REQUIRES(models, result) \ typename ::boost::Requires_< \ (0 BOOST_PP_SEQ_FOR_EACH(BOOST_CONCEPT_REQUIRES_, ~, models)), \ void(*)result \ >::type #endif // C++0x proposed syntax changed. This supports an older usage #define BOOST_CONCEPT_WHERE(models,result) BOOST_CONCEPT_REQUIRES(models,result) } // namespace boost::concept_check #endif // BOOST_CONCEPT_REQUIRES_DWA2006430_HPP usage.hpp000444000765000024 235112161110604 21530 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept// 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 detail000755000765000024 012161110660 21021 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/conceptbackward_compatibility.hpp000444000765000024 110312161110616 26372 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept/detail// 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 borland.hpp000444000765000024 176512161110601 23314 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept/detail// 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 concept_def.hpp000444000765000024 614712161110650 24147 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept/detail// 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 concept_undef.hpp000444000765000024 36512161110601 24462 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept/detail// 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 general.hpp000444000765000024 362212161110660 23307 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept/detail// 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 has_constraints.hpp000444000765000024 322612161110616 25075 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept/detail// 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 msvc.hpp000444000765000024 520312161110630 22634 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/concept/detail// 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 config000755000765000024 012161110701 17365 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostabi_prefix.hpp000444000765000024 132312161110601 22341 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// 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 abi_suffix.hpp000444000765000024 145012161110700 22351 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// 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 auto_link.hpp000444000765000024 3454312161110672 22260 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// (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 hyphen: 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). p STLport build. n STLport build without its IOStreams. 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 # if defined(BOOST_MSVC) && (BOOST_MSVC < 1200) // Note: no compilers before 1200 are supported # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1300) # ifdef UNDER_CE // eVC4: # define BOOST_LIB_TOOLSET "evc4" # else // vc6: # define BOOST_LIB_TOOLSET "vc6" # endif # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1310) // vc7: # define BOOST_LIB_TOOLSET "vc7" # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1400) // vc71: # define BOOST_LIB_TOOLSET "vc71" # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1500) // vc80: # define BOOST_LIB_TOOLSET "vc80" # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1600) // vc90: # define BOOST_LIB_TOOLSET "vc90" # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1700) // vc10: # define BOOST_LIB_TOOLSET "vc100" # elif defined(BOOST_MSVC) // 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 posix_features.hpp000444000765000024 736712161110701 23310 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// (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 requires_threads.hpp000444000765000024 701712161110665 23622 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// (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 select_compiler_config.hpp000444000765000024 734512161110612 24743 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// 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 select_platform_config.hpp000444000765000024 640012161110662 24751 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// 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 select_stdlib_config.hpp000444000765000024 577512161110643 24423 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// 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 suffix.hpp000444000765000024 10113412161110612 21600 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// Boost config.hpp configuration header file ------------------------------// // boostinspect:ndprecated_macros -- tell the inspect tool to ignore this 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 // // 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 // 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 // same again for __int128: #if defined(BOOST_HAS_INT128) && defined(__cplusplus) namespace boost{ # ifdef __GNUC__ __extension__ typedef __int128 int128_type; __extension__ typedef unsigned __int128 uint128_type; # else typedef __int128 int128_type; typedef unsigned __int128 uint128_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 // // 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 // 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 // // Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined // #if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276) #define BOOST_NO_CXX11_DECLTYPE_N3276 BOOST_NO_CXX11_DECLTYPE #endif // -------------------- Deprecated macros for 1.50 --------------------------- // These will go away in a future release // Use BOOST_NO_CXX11_HDR_UNORDERED_SET or BOOST_NO_CXX11_HDR_UNORDERED_MAP // instead of BOOST_NO_STD_UNORDERED #if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) || defined (BOOST_NO_CXX11_HDR_UNORDERED_SET) # ifndef BOOST_NO_CXX11_STD_UNORDERED # define BOOST_NO_CXX11_STD_UNORDERED # endif #endif // Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST instead of BOOST_NO_INITIALIZER_LISTS #if defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS) # define BOOST_NO_INITIALIZER_LISTS #endif // Use BOOST_NO_CXX11_HDR_ARRAY instead of BOOST_NO_0X_HDR_ARRAY #if defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_BOOST_NO_0X_HDR_ARRAY) # define BOOST_NO_0X_HDR_ARRAY #endif // Use BOOST_NO_CXX11_HDR_CHRONO instead of BOOST_NO_0X_HDR_CHRONO #if defined(BOOST_NO_CXX11_HDR_CHRONO) && !defined(BOOST_NO_0X_HDR_CHRONO) # define BOOST_NO_0X_HDR_CHRONO #endif // Use BOOST_NO_CXX11_HDR_CODECVT instead of BOOST_NO_0X_HDR_CODECVT #if defined(BOOST_NO_CXX11_HDR_CODECVT) && !defined(BOOST_NO_0X_HDR_CODECVT) # define BOOST_NO_0X_HDR_CODECVT #endif // Use BOOST_NO_CXX11_HDR_CONDITION_VARIABLE instead of BOOST_NO_0X_HDR_CONDITION_VARIABLE #if defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) && !defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE) # define BOOST_NO_0X_HDR_CONDITION_VARIABLE #endif // Use BOOST_NO_CXX11_HDR_FORWARD_LIST instead of BOOST_NO_0X_HDR_FORWARD_LIST #if defined(BOOST_NO_CXX11_HDR_FORWARD_LIST) && !defined(BOOST_NO_0X_HDR_FORWARD_LIST) # define BOOST_NO_0X_HDR_FORWARD_LIST #endif // Use BOOST_NO_CXX11_HDR_FUTURE instead of BOOST_NO_0X_HDR_FUTURE #if defined(BOOST_NO_CXX11_HDR_FUTURE) && !defined(BOOST_NO_0X_HDR_FUTURE) # define BOOST_NO_0X_HDR_FUTURE #endif // Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST // instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS #ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST # ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST # define BOOST_NO_0X_HDR_INITIALIZER_LIST # endif # ifndef BOOST_NO_INITIALIZER_LISTS # define BOOST_NO_INITIALIZER_LISTS # endif #endif // Use BOOST_NO_CXX11_HDR_MUTEX instead of BOOST_NO_0X_HDR_MUTEX #if defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) # define BOOST_NO_0X_HDR_MUTEX #endif // Use BOOST_NO_CXX11_HDR_RANDOM instead of BOOST_NO_0X_HDR_RANDOM #if defined(BOOST_NO_CXX11_HDR_RANDOM) && !defined(BOOST_NO_0X_HDR_RANDOM) # define BOOST_NO_0X_HDR_RANDOM #endif // Use BOOST_NO_CXX11_HDR_RATIO instead of BOOST_NO_0X_HDR_RATIO #if defined(BOOST_NO_CXX11_HDR_RATIO) && !defined(BOOST_NO_0X_HDR_RATIO) # define BOOST_NO_0X_HDR_RATIO #endif // Use BOOST_NO_CXX11_HDR_REGEX instead of BOOST_NO_0X_HDR_REGEX #if defined(BOOST_NO_CXX11_HDR_REGEX) && !defined(BOOST_NO_0X_HDR_REGEX) # define BOOST_NO_0X_HDR_REGEX #endif // Use BOOST_NO_CXX11_HDR_SYSTEM_ERROR instead of BOOST_NO_0X_HDR_SYSTEM_ERROR #if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_0X_HDR_SYSTEM_ERROR) # define BOOST_NO_0X_HDR_SYSTEM_ERROR #endif // Use BOOST_NO_CXX11_HDR_THREAD instead of BOOST_NO_0X_HDR_THREAD #if defined(BOOST_NO_CXX11_HDR_THREAD) && !defined(BOOST_NO_0X_HDR_THREAD) # define BOOST_NO_0X_HDR_THREAD #endif // Use BOOST_NO_CXX11_HDR_TUPLE instead of BOOST_NO_0X_HDR_TUPLE #if defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_0X_HDR_TUPLE) # define BOOST_NO_0X_HDR_TUPLE #endif // Use BOOST_NO_CXX11_HDR_TYPE_TRAITS instead of BOOST_NO_0X_HDR_TYPE_TRAITS #if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) && !defined(BOOST_NO_0X_HDR_TYPE_TRAITS) # define BOOST_NO_0X_HDR_TYPE_TRAITS #endif // Use BOOST_NO_CXX11_HDR_TYPEINDEX instead of BOOST_NO_0X_HDR_TYPEINDEX #if defined(BOOST_NO_CXX11_HDR_TYPEINDEX) && !defined(BOOST_NO_0X_HDR_TYPEINDEX) # define BOOST_NO_0X_HDR_TYPEINDEX #endif // Use BOOST_NO_CXX11_HDR_UNORDERED_MAP instead of BOOST_NO_0X_HDR_UNORDERED_MAP #if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) && !defined(BOOST_NO_0X_HDR_UNORDERED_MAP) # define BOOST_NO_0X_HDR_UNORDERED_MAP #endif // Use BOOST_NO_CXX11_HDR_UNORDERED_SET instead of BOOST_NO_0X_HDR_UNORDERED_SET #if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) && !defined(BOOST_NO_0X_HDR_UNORDERED_SET) # define BOOST_NO_0X_HDR_UNORDERED_SET #endif // ------------------ End of deprecated macros for 1.50 --------------------------- // -------------------- Deprecated macros for 1.51 --------------------------- // These will go away in a future release // Use BOOST_NO_CXX11_AUTO_DECLARATIONS instead of BOOST_NO_AUTO_DECLARATIONS #if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_AUTO_DECLARATIONS) # define BOOST_NO_AUTO_DECLARATIONS #endif // Use BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS instead of BOOST_NO_AUTO_MULTIDECLARATIONS #if defined(BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS) && !defined(BOOST_NO_AUTO_MULTIDECLARATIONS) # define BOOST_NO_AUTO_MULTIDECLARATIONS #endif // Use BOOST_NO_CXX11_CHAR16_T instead of BOOST_NO_CHAR16_T #if defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CHAR16_T) # define BOOST_NO_CHAR16_T #endif // Use BOOST_NO_CXX11_CHAR32_T instead of BOOST_NO_CHAR32_T #if defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CHAR32_T) # define BOOST_NO_CHAR32_T #endif // Use BOOST_NO_CXX11_TEMPLATE_ALIASES instead of BOOST_NO_TEMPLATE_ALIASES #if defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_TEMPLATE_ALIASES) # define BOOST_NO_TEMPLATE_ALIASES #endif // Use BOOST_NO_CXX11_CONSTEXPR instead of BOOST_NO_CONSTEXPR #if defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CONSTEXPR) # define BOOST_NO_CONSTEXPR #endif // Use BOOST_NO_CXX11_DECLTYPE_N3276 instead of BOOST_NO_DECLTYPE_N3276 #if defined(BOOST_NO_CXX11_DECLTYPE_N3276) && !defined(BOOST_NO_DECLTYPE_N3276) # define BOOST_NO_DECLTYPE_N3276 #endif // Use BOOST_NO_CXX11_DECLTYPE instead of BOOST_NO_DECLTYPE #if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE) # define BOOST_NO_DECLTYPE #endif // Use BOOST_NO_CXX11_DEFAULTED_FUNCTIONS instead of BOOST_NO_DEFAULTED_FUNCTIONS #if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_DEFAULTED_FUNCTIONS) # define BOOST_NO_DEFAULTED_FUNCTIONS #endif // Use BOOST_NO_CXX11_DELETED_FUNCTIONS instead of BOOST_NO_DELETED_FUNCTIONS #if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_DELETED_FUNCTIONS) # define BOOST_NO_DELETED_FUNCTIONS #endif // Use BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS instead of BOOST_NO_EXPLICIT_CONVERSION_OPERATORS #if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) && !defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS) # define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS #endif // Use BOOST_NO_CXX11_EXTERN_TEMPLATE instead of BOOST_NO_EXTERN_TEMPLATE #if defined(BOOST_NO_CXX11_EXTERN_TEMPLATE) && !defined(BOOST_NO_EXTERN_TEMPLATE) # define BOOST_NO_EXTERN_TEMPLATE #endif // Use BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS instead of BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS #if defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS) # define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS #endif // Use BOOST_NO_CXX11_LAMBDAS instead of BOOST_NO_LAMBDAS #if defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS) # define BOOST_NO_LAMBDAS #endif // Use BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS instead of BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS #if defined(BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS) && !defined(BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS) # define BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS #endif // Use BOOST_NO_CXX11_NOEXCEPT instead of BOOST_NO_NOEXCEPT #if defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_NOEXCEPT) # define BOOST_NO_NOEXCEPT #endif // Use BOOST_NO_CXX11_NULLPTR instead of BOOST_NO_NULLPTR #if defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR) # define BOOST_NO_NULLPTR #endif // Use BOOST_NO_CXX11_RAW_LITERALS instead of BOOST_NO_RAW_LITERALS #if defined(BOOST_NO_CXX11_RAW_LITERALS) && !defined(BOOST_NO_RAW_LITERALS) # define BOOST_NO_RAW_LITERALS #endif // Use BOOST_NO_CXX11_RVALUE_REFERENCES instead of BOOST_NO_RVALUE_REFERENCES #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES) # define BOOST_NO_RVALUE_REFERENCES #endif // Use BOOST_NO_CXX11_SCOPED_ENUMS instead of BOOST_NO_SCOPED_ENUMS #if defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_NO_SCOPED_ENUMS) # define BOOST_NO_SCOPED_ENUMS #endif // Use BOOST_NO_CXX11_STATIC_ASSERT instead of BOOST_NO_STATIC_ASSERT #if defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_NO_STATIC_ASSERT) # define BOOST_NO_STATIC_ASSERT #endif // Use BOOST_NO_CXX11_STD_UNORDERED instead of BOOST_NO_STD_UNORDERED #if defined(BOOST_NO_CXX11_STD_UNORDERED) && !defined(BOOST_NO_STD_UNORDERED) # define BOOST_NO_STD_UNORDERED #endif // Use BOOST_NO_CXX11_UNICODE_LITERALS instead of BOOST_NO_UNICODE_LITERALS #if defined(BOOST_NO_CXX11_UNICODE_LITERALS) && !defined(BOOST_NO_UNICODE_LITERALS) # define BOOST_NO_UNICODE_LITERALS #endif // Use BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX instead of BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX #if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !defined(BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX) # define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX #endif // Use BOOST_NO_CXX11_VARIADIC_TEMPLATES instead of BOOST_NO_VARIADIC_TEMPLATES #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_VARIADIC_TEMPLATES) # define BOOST_NO_VARIADIC_TEMPLATES #endif // Use BOOST_NO_CXX11_VARIADIC_MACROS instead of BOOST_NO_VARIADIC_MACROS #if defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS) # define BOOST_NO_VARIADIC_MACROS #endif // Use BOOST_NO_CXX11_NUMERIC_LIMITS instead of BOOST_NO_NUMERIC_LIMITS_LOWEST #if defined(BOOST_NO_CXX11_NUMERIC_LIMITS) && !defined(BOOST_NO_NUMERIC_LIMITS_LOWEST) # define BOOST_NO_NUMERIC_LIMITS_LOWEST #endif // ------------------ End of deprecated macros for 1.51 --------------------------- // // 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_CXX11_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 // // constexpr workarounds // #if defined(BOOST_NO_CXX11_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 // // Set BOOST_HAS_STATIC_ASSERT when BOOST_NO_CXX11_STATIC_ASSERT is not defined // #if !defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT) # define BOOST_HAS_STATIC_ASSERT #endif // // Set BOOST_HAS_RVALUE_REFS when BOOST_NO_CXX11_RVALUE_REFERENCES is not defined // #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS) #define BOOST_HAS_RVALUE_REFS #endif // // Set BOOST_HAS_VARIADIC_TMPL when BOOST_NO_CXX11_VARIADIC_TEMPLATES is not defined // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_HAS_VARIADIC_TMPL) #define BOOST_HAS_VARIADIC_TMPL #endif #endif user.hpp000444000765000024 1224112161110660 21235 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// 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 warning_disable.hpp000444000765000024 351312161110614 23370 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config// 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 abi000755000765000024 012161110702 20121 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/configborland_prefix.hpp000444000765000024 200512161110641 23764 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/abi// (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 borland_suffix.hpp000444000765000024 44412161110623 23760 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/abi// (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 msvc_prefix.hpp000444000765000024 151112161110702 23312 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/abi// (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 msvc_suffix.hpp000444000765000024 40412161110603 23301 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/abi// (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) compiler000755000765000024 012161110677 21213 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/configborland.hpp000444000765000024 2137512161110671 23524 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_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_CXX11_CHAR16_T # define BOOST_NO_CXX11_CHAR32_T # define BOOST_NO_CXX11_DECLTYPE # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS # define BOOST_NO_CXX11_EXTERN_TEMPLATE # define BOOST_NO_CXX11_RVALUE_REFERENCES # define BOOST_NO_CXX11_SCOPED_ENUMS # define BOOST_NO_CXX11_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_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS // UTF-8 still not supported #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_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__) clang.hpp000444000765000024 715412161110601 23137 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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) # define BOOST_NO_EXCEPTIONS #endif #if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI) # define BOOST_NO_RTTI #endif #if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID) # define BOOST_NO_TYPEID #endif #if defined(__int64) # define BOOST_HAS_MS_INT64 #endif #define BOOST_HAS_NRVO // Clang supports "long long" in all compilation modes. #define BOOST_HAS_LONG_LONG // // Dynamic shared object (DSO) and dynamic-link library (DLL) support // #if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32) # define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default"))) # define BOOST_SYMBOL_IMPORT # define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default"))) #endif #if !__has_feature(cxx_auto_type) # define BOOST_NO_CXX11_AUTO_DECLARATIONS # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #endif #if !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L) # define BOOST_NO_CXX11_CHAR16_T # define BOOST_NO_CXX11_CHAR32_T #endif #if !__has_feature(cxx_constexpr) # define BOOST_NO_CXX11_CONSTEXPR #endif #if !__has_feature(cxx_decltype) # define BOOST_NO_CXX11_DECLTYPE #endif #if !__has_feature(cxx_decltype_incomplete_return_types) # define BOOST_NO_CXX11_DECLTYPE_N3276 #endif #if !__has_feature(cxx_defaulted_functions) # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #endif #if !__has_feature(cxx_deleted_functions) # define BOOST_NO_CXX11_DELETED_FUNCTIONS #endif #if !__has_feature(cxx_explicit_conversions) # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #endif #if !__has_feature(cxx_default_function_template_args) # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #endif #if !__has_feature(cxx_generalized_initializers) # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #endif #if !__has_feature(cxx_lambdas) # define BOOST_NO_CXX11_LAMBDAS #endif #if !__has_feature(cxx_local_type_template_args) # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #endif #if !__has_feature(cxx_noexcept) # define BOOST_NO_CXX11_NOEXCEPT #endif #if !__has_feature(cxx_nullptr) # define BOOST_NO_CXX11_NULLPTR #endif #if !__has_feature(cxx_range_for) # define BOOST_NO_CXX11_RANGE_BASED_FOR #endif #if !__has_feature(cxx_raw_string_literals) # define BOOST_NO_CXX11_RAW_LITERALS #endif #if !__has_feature(cxx_generalized_initializers) # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #endif #if !__has_feature(cxx_rvalue_references) # define BOOST_NO_CXX11_RVALUE_REFERENCES #endif #if !__has_feature(cxx_strong_enums) # define BOOST_NO_CXX11_SCOPED_ENUMS #endif #if !__has_feature(cxx_static_assert) # define BOOST_NO_CXX11_STATIC_ASSERT #endif #if !__has_feature(cxx_alias_templates) # define BOOST_NO_CXX11_TEMPLATE_ALIASES #endif #if !__has_feature(cxx_unicode_literals) # define BOOST_NO_CXX11_UNICODE_LITERALS #endif #if !__has_feature(cxx_variadic_templates) # define BOOST_NO_CXX11_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 codegear.hpp000444000765000024 1346112161110612 23644 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_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_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXTERN_TEMPLATE #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_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_CXX11_HDR_INITIALIZER_LIST // 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__) comeau.hpp000444000765000024 323212161110637 23326 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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 common_edg.hpp000444000765000024 625212161110607 24166 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_EXTERN_TEMPLATE #endif #if (__EDG_VERSION__ <= 310) // No support for initializer lists # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #endif #if (__EDG_VERSION__ < 400) # define BOOST_NO_CXX11_VARIADIC_MACROS #endif #define BOOST_NO_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_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 compaq_cxx.hpp000444000765000024 101012161110636 24206 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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? cray.hpp000444000765000024 421412161110675 23016 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_AUTO_DECLARATIONS #undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_HAS_NRVO #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_TWO_PHASE_NAME_LOOKUP #define BOOST_HAS_NRVO #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DECLTYPE #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_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 digitalmars.hpp000444000765000024 615212161110641 24354 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// 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_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_EXTERN_TEMPLATE #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #if (__DMC__ < 0x812) #define BOOST_NO_CXX11_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 gcc.hpp000444000765000024 2122312161110613 22623 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_EXTERN_TEMPLATE // Variadic macros do not exist for gcc versions before 3.0 # define BOOST_NO_CXX11_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_CXX11_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 // // Recent GCC versions have __int128 when in 64-bit mode: // #if defined(__SIZEOF_INT128__) # define BOOST_HAS_INT128 #endif // 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_CXX11_DECLTYPE # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS # define BOOST_NO_CXX11_RVALUE_REFERENCES # define BOOST_NO_CXX11_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_CXX11_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_CXX11_AUTO_DECLARATIONS # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS # define BOOST_NO_CXX11_CHAR16_T # define BOOST_NO_CXX11_CHAR32_T # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS # define BOOST_NO_CXX11_DELETED_FUNCTIONS #endif #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) # 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_CXX11_EXPLICIT_CONVERSION_OPERATORS # define BOOST_NO_CXX11_LAMBDAS # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS # define BOOST_NO_CXX11_RAW_LITERALS # define BOOST_NO_CXX11_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_CXX11_SCOPED_ENUMS before 4.5.1 // See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064 # define BOOST_NO_CXX11_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_CXX11_CONSTEXPR #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #endif #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__) # define BOOST_NO_CXX11_TEMPLATE_ALIASES #endif // C++0x features not supported at all yet // #define BOOST_NO_CXX11_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 gcc_xml.hpp000444000765000024 411012161110642 23461 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_CONSTEXPR # define BOOST_NO_CXX11_NULLPTR # define BOOST_NO_CXX11_TEMPLATE_ALIASES # define BOOST_NO_CXX11_DECLTYPE # define BOOST_NO_CXX11_DECLTYPE_N3276 # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS # define BOOST_NO_CXX11_RVALUE_REFERENCES # define BOOST_NO_CXX11_STATIC_ASSERT # define BOOST_NO_CXX11_VARIADIC_TEMPLATES # define BOOST_NO_CXX11_VARIADIC_MACROS # define BOOST_NO_CXX11_AUTO_DECLARATIONS # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS # define BOOST_NO_CXX11_CHAR16_T # define BOOST_NO_CXX11_CHAR32_T # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS # define BOOST_NO_CXX11_DELETED_FUNCTIONS # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_SCOPED_ENUMS # define BOOST_NO_SFINAE_EXPR # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS # define BOOST_NO_CXX11_LAMBDAS # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS # define BOOST_NO_CXX11_RANGE_BASED_FOR # define BOOST_NO_CXX11_RAW_LITERALS # define BOOST_NO_CXX11_UNICODE_LITERALS # define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__ greenhills.hpp000444000765000024 151312161110602 24201 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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 hp_acc.hpp000444000765000024 1127612161110643 23316 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_EXTERN_TEMPLATE #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_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_CXX11_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 intel.hpp000444000765000024 2420612161110676 23217 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_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_CXX11_LAMBDAS //# undef BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS //# undef BOOST_NO_CXX11_DECLTYPE //# undef BOOST_NO_CXX11_AUTO_DECLARATIONS //# undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #endif #if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION >= 1200) //# undef BOOST_NO_CXX11_RVALUE_REFERENCES // Enabling this breaks Filesystem and Exception libraries //# undef BOOST_NO_CXX11_SCOPED_ENUMS // doesn't really work!! # undef BOOST_NO_CXX11_DELETED_FUNCTIONS # undef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS # undef BOOST_NO_CXX11_LAMBDAS # undef BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS # undef BOOST_NO_CXX11_DECLTYPE # undef BOOST_NO_CXX11_AUTO_DECLARATIONS # undef BOOST_NO_CXX11_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_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS # undef BOOST_NO_CXX11_NULLPTR # undef BOOST_NO_CXX11_RVALUE_REFERENCES # undef BOOST_NO_SFINAE_EXPR # undef BOOST_NO_CXX11_TEMPLATE_ALIASES # undef BOOST_NO_CXX11_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_CXX11_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_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_VARIADIC_TEMPLATES # define BOOST_NO_CXX11_DELETED_FUNCTIONS # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS # define BOOST_NO_CXX11_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 kai.hpp000444000765000024 204012161110677 22621 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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 metrowerks.hpp000444000765000024 1073012161110642 24274 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_RVALUE_REFERENCES #endif #define BOOST_NO_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_EXTERN_TEMPLATE #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_VARIADIC_MACROS #define BOOST_NO_CXX11_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 mpw.hpp000444000765000024 551612161110647 22670 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_EXTERN_TEMPLATE #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_VARIADIC_MACROS #define BOOST_NO_CXX11_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 nvcc.hpp000444000765000024 153312161110636 23007 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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 pathscale.hpp000444000765000024 557112161110655 24031 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_VARIADIC_TEMPLATES # define BOOST_NO_CXX11_UNICODE_LITERALS # define BOOST_NO_CXX11_TEMPLATE_ALIASES # define BOOST_NO_CXX11_STATIC_ASSERT # define BOOST_NO_SFINAE_EXPR # define BOOST_NO_CXX11_SCOPED_ENUMS # define BOOST_NO_CXX11_RVALUE_REFERENCES # define BOOST_NO_CXX11_RANGE_BASED_FOR # define BOOST_NO_CXX11_RAW_LITERALS # define BOOST_NO_CXX11_NULLPTR # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_NOEXCEPT # define BOOST_NO_CXX11_LAMBDAS # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS # define BOOST_NO_MS_INT64_NUMERIC_LIMITS # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS # define BOOST_NO_CXX11_DELETED_FUNCTIONS # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS # define BOOST_NO_CXX11_DECLTYPE # define BOOST_NO_CXX11_DECLTYPE_N3276 # define BOOST_NO_CXX11_CONSTEXPR # define BOOST_NO_COMPLETE_VALUE_INITIALIZATION # define BOOST_NO_CXX11_CHAR32_T # define BOOST_NO_CXX11_CHAR16_T # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS # define BOOST_NO_CXX11_AUTO_DECLARATIONS # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CHRONO #endif pgi.hpp000444000765000024 715212161110635 22637 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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__ >= 11 // options requested by configure --enable-test #define BOOST_HAS_PTHREADS #define BOOST_HAS_THREADS #define BOOST_HAS_PTHREAD_YIELD #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 #define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL #define BOOST_NO_TWO_PHASE_NAME_LOOKUP #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_AUTO_DECLARATIONS #elif __PGIC__ >= 10 // options requested by configure --enable-test #define BOOST_HAS_THREADS #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_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_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_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_EXTERN_TEMPLATE #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_NUMERIC_LIMITS #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_SWPRINTF #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_VARIADIC_MACROS #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #define BOOST_NO_CXX11_HDR_UNORDERED_SET #define BOOST_NO_CXX11_HDR_UNORDERED_MAP #define BOOST_NO_CXX11_HDR_TYPEINDEX #define BOOST_NO_CXX11_HDR_TYPE_TRAITS #define BOOST_NO_CXX11_HDR_TUPLE #define BOOST_NO_CXX11_HDR_THREAD #define BOOST_NO_CXX11_HDR_SYSTEM_ERROR #define BOOST_NO_CXX11_HDR_REGEX #define BOOST_NO_CXX11_HDR_RATIO #define BOOST_NO_CXX11_HDR_RANDOM #define BOOST_NO_CXX11_HDR_MUTEX #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_HDR_FUTURE #define BOOST_NO_CXX11_HDR_FORWARD_LIST #define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE #define BOOST_NO_CXX11_HDR_CODECVT #define BOOST_NO_CXX11_HDR_CHRONO #define BOOST_NO_CXX11_HDR_ARRAY // // version check: // probably nothing to do here? sgi_mipspro.hpp000444000765000024 144312161110622 24404 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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? sunpro_cc.hpp000444000765000024 1200612161110677 24073 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_EXTERN_TEMPLATE #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_CXX11_VARIADIC_MACROS #define BOOST_NO_CXX11_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 vacpp.hpp000444000765000024 1006212161110601 23174 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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_CXX11_AUTO_DECLARATIONS # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #endif #if ! __IBMCPP_UTF_LITERAL__ # define BOOST_NO_CXX11_CHAR16_T # define BOOST_NO_CXX11_CHAR32_T #endif #if ! __IBMCPP_CONSTEXPR # define BOOST_NO_CXX11_CONSTEXPR #endif #if ! __IBMCPP_DECLTYPE # define BOOST_NO_CXX11_DECLTYPE #else # define BOOST_HAS_DECLTYPE #endif #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #if ! __IBMCPP_EXPLICIT_CONVERSION_OPERATORS # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #endif #if ! __IBMCPP_EXTERN_TEMPLATE # define BOOST_NO_CXX11_EXTERN_TEMPLATE #endif #if ! __IBMCPP_VARIADIC_TEMPLATES // not enabled separately at this time # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #endif #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR #define BOOST_NO_CXX11_RAW_LITERALS #if ! __IBMCPP_RVALUE_REFERENCES # define BOOST_NO_CXX11_RVALUE_REFERENCES #endif #if ! __IBMCPP_SCOPED_ENUM # define BOOST_NO_CXX11_SCOPED_ENUMS #endif #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #if ! __IBMCPP_STATIC_ASSERT # define BOOST_NO_CXX11_STATIC_ASSERT #endif #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #if ! __IBMCPP_VARIADIC_TEMPLATES # define BOOST_NO_CXX11_VARIADIC_TEMPLATES #endif #if ! __C99_MACRO_WITH_VA_ARGS # define BOOST_NO_CXX11_VARIADIC_MACROS #endif visualc.hpp000444000765000024 2535112161110605 23544 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/compiler// (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: // // We need to be careful with the checks in this file, as contrary // to popular belief there are versions with _MSC_VER with the final // digit non-zero (mainly the MIPS cross compiler). // // So we either test _MSC_VER >= XXXX or else _MSC_VER < XXXX. // No other comparisons (==, >, or <=) are safe. // #define BOOST_MSVC _MSC_VER // // Helper macro BOOST_MSVC_FULL_VER for use in Boost code: // #if _MSC_FULL_VER > 100000000 # define BOOST_MSVC_FULL_VER _MSC_FULL_VER #else # define BOOST_MSVC_FULL_VER (_MSC_FULL_VER * 10) #endif // Attempt to suppress VC6 warnings about the length of decorated names (obsolete): #pragma warning( disable : 4503 ) // warning: decorated name length exceeded // // 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 #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 _MSC_VER == 1202 # define BOOST_NO_STD_TYPEINFO # endif #endif /// Visual Studio has no fenv.h #define BOOST_NO_FENV_H #if (_MSC_VER < 1310) // 130X == 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 >= 1300) # 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_CXX11_EXTERN_TEMPLATE // Variadic macros do not exist for VC7.1 and lower # define BOOST_NO_CXX11_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 < 1500 // 140X == VC++ 8.0 # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS #endif #if _MSC_VER < 1600 // 150X == VC++ 9.0 // A bug in VC9: # define BOOST_NO_ADL_BARRIER #endif // 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 #if _MSC_VER < 1600 || !defined(BOOST_STRICT_CONFIG) // 150X == VC++ 9.0 # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #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 // // TR1 features: // #if _MSC_VER >= 1700 // # define BOOST_HAS_TR1_HASH // don't know if this is true yet. // # define BOOST_HAS_TR1_TYPE_TRAITS // don't know if this is true yet. # define BOOST_HAS_TR1_UNORDERED_MAP # define BOOST_HAS_TR1_UNORDERED_SET #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_CXX11_AUTO_DECLARATIONS # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS # define BOOST_NO_CXX11_LAMBDAS # define BOOST_NO_CXX11_RVALUE_REFERENCES # define BOOST_NO_CXX11_STATIC_ASSERT # define BOOST_NO_CXX11_NULLPTR # define BOOST_NO_CXX11_DECLTYPE #endif // _MSC_VER < 1600 #if _MSC_VER >= 1600 # define BOOST_HAS_STDINT_H #endif // C++ features supported by VC++ 11 (aka 2012) // #if _MSC_VER < 1700 # define BOOST_NO_CXX11_RANGE_BASED_FOR # define BOOST_NO_CXX11_SCOPED_ENUMS #endif // _MSC_VER < 1700 // C++0x features not supported by any versions #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_TWO_PHASE_NAME_LOOKUP #define BOOST_NO_CXX11_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 #ifndef BOOST_COMPILER // 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 // Note: I'm not aware of any CE compiler with version 13xx # 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 # elif _MSC_VER < 1500 # define BOOST_COMPILER_VERSION evc8 # elif _MSC_VER < 1600 # define BOOST_COMPILER_VERSION evc9 # elif _MSC_VER < 1700 # define BOOST_COMPILER_VERSION evc10 # elif _MSC_VER < 1800 # 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 < 1310 # define BOOST_COMPILER_VERSION 7.0 # elif _MSC_VER < 1400 # define BOOST_COMPILER_VERSION 7.1 # elif _MSC_VER < 1500 # define BOOST_COMPILER_VERSION 8.0 # elif _MSC_VER < 1600 # define BOOST_COMPILER_VERSION 9.0 # elif _MSC_VER < 1700 # define BOOST_COMPILER_VERSION 10.0 # elif _MSC_VER < 1800 # 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) #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 no_tr1000755000765000024 012161110676 20602 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/configcmath.hpp000444000765000024 154212161110676 22546 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/no_tr1// (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 complex.hpp000444000765000024 156212161110674 23121 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/no_tr1// (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 functional.hpp000444000765000024 161212161110644 23605 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/no_tr1// (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 memory.hpp000444000765000024 155212161110636 22757 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/no_tr1// (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 utility.hpp000444000765000024 156212161110613 23146 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/no_tr1// (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 platform000755000765000024 012161110701 21211 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/configaix.hpp000444000765000024 162212161110665 22652 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 amigaos.hpp000444000765000024 71112161110601 23455 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 beos.hpp000444000765000024 115312161110647 23020 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 bsd.hpp000444000765000024 503012161110663 22634 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 cray.hpp000444000765000024 72312161110656 23010 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 cygwin.hpp000444000765000024 265212161110643 23371 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 hpux.hpp000444000765000024 500412161110615 23046 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 irix.hpp000444000765000024 146412161110610 23036 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 linux.hpp000444000765000024 514312161110601 23220 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 macos.hpp000444000765000024 457612161110661 23202 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 qnxnto.hpp000444000765000024 143512161110642 23415 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 solaris.hpp000444000765000024 134512161110637 23546 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 symbian.hpp000444000765000024 522712161110611 23527 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 vms.hpp000444000765000024 140612161110603 22666 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 vxworks.hpp000444000765000024 152212161110701 23602 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 win32.hpp000444000765000024 426412161110651 23033 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/platform// (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 stdlib000755000765000024 012161110664 20656 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/configdinkumware.hpp000444000765000024 1235712161110650 23715 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_ARRAY # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_FUNCTIONAL # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_SMART_PTR #endif #if (!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_CXX11_HDR_TUPLE) # define BOOST_NO_CXX11_HDR_TUPLE #endif // C++0x headers implemented in 540 (as shipped by Microsoft) // #if !defined(_CPPLIB_VER) || _CPPLIB_VER < 540 # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_ALLOCATOR # define BOOST_NO_CXX11_ATOMIC_SMART_PTR #endif // // C++0x headers not yet (fully) implemented: // # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #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 libcomo.hpp000444000765000024 436712161110601 23151 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_ARRAY # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL // // 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__) libcpp.hpp000444000765000024 175312161110606 22777 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_TUPLE #endif // // These appear to be unusable/incomplete so far: // # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR // libc++ uses a non-standard messages_base #define BOOST_NO_STD_MESSAGES // --- end --- libstdcpp3.hpp000444000765000024 1423612161110650 23614 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_ARRAY # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_HDR_FUNCTIONAL #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_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_SMART_PTR #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_CXX11_HDR_CONDITION_VARIABLE) || !defined(BOOST_NO_CXX11_HDR_MUTEX)) # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_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_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_RANDOM #endif // C++0x features in GCC 4.6.0 and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__) # define BOOST_NO_CXX11_HDR_TYPEINDEX #endif // C++0x features in GCC 4.7.0 and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__) // Note that although existed prior to 4.7, "stead_clock" is spelled "monotonic_clock" // so 4.7.0 is the first truely conforming one. # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_ALLOCATOR #endif // C++0x headers not yet (fully!) implemented // # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_ATOMIC_SMART_PTR // --- end --- modena.hpp000444000765000024 322212161110610 22755 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_ARRAY # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "Modena C++ standard library" msl.hpp000444000765000024 441112161110613 22311 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_ARRAY # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__) roguewave.hpp000444000765000024 1331412161110611 23542 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_ARRAY #endif // type_traits header is incomplete: # define BOOST_NO_CXX11_HDR_TYPE_TRAITS // // C++0x headers not yet implemented // # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL sgi.hpp000444000765000024 1077312161110661 22333 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_ARRAY # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "SGI standard library" stlport.hpp000444000765000024 2002512161110610 23241 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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 >= 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_CXX11_HDR_ARRAY # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) vacpp.hpp000444000765000024 346212161110664 22642 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/config/stdlib// (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_CXX11_HDR_ARRAY # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE # define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM # define BOOST_NO_CXX11_HDR_RATIO # define BOOST_NO_CXX11_HDR_REGEX # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR # define BOOST_NO_CXX11_HDR_THREAD # define BOOST_NO_CXX11_HDR_TUPLE # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_HDR_UNORDERED_MAP # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "Visual Age default standard library" container000755000765000024 012161110645 20111 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostallocator_traits.hpp000444000765000024 5031612161110645 24352 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/container////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Pablo Halpern 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) // ////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP #define BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include #include #include #include #include #include #include #include #include //numeric_limits<>::max() #include //placement new #include //std::allocator #include ///@cond namespace boost { namespace container { namespace container_detail { //workaround needed for C++03 compilers with no construct() //supporting rvalue references template struct is_std_allocator { static const bool value = false; }; template struct is_std_allocator< std::allocator > { static const bool value = true; }; } //namespace container_detail { ///@endcond //! The class template allocator_traits supplies a uniform interface to all allocator types. //! This class is a C++03-compatible implementation of std::allocator_traits template struct allocator_traits { //allocator_type typedef Alloc allocator_type; //value_type typedef typename Alloc::value_type value_type; #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Alloc::pointer if such a type exists; otherwise, value_type* //! typedef unspecified pointer; //! Alloc::const_pointer if such a type exists ; otherwise, pointer_traits::rebind::rebind. //! typedef see_documentation void_pointer; //! Alloc::const_void_pointer if such a type exists ; otherwis e, pointer_traits::rebind::difference_type. //! typedef see_documentation difference_type; //! Alloc::size_type if such a type exists ; otherwise, make_unsigned::type //! typedef see_documentation size_type; //! Alloc::propagate_on_container_copy_assignment if such a type exists, otherwise an integral_constant //! type with internal constant static member `value` == false. typedef see_documentation propagate_on_container_copy_assignment; //! Alloc::propagate_on_container_move_assignment if such a type exists, otherwise an integral_constant //! type with internal constant static member `value` == false. typedef see_documentation propagate_on_container_move_assignment; //! Alloc::propagate_on_container_swap if such a type exists, otherwise an integral_constant //! type with internal constant static member `value` == false. typedef see_documentation propagate_on_container_swap; //! Defines an allocator: Alloc::rebind::other if such a type exists; otherwise, Alloc //! if Alloc is a class template instantiation of the form Alloc, where Args is zero or //! more type arguments ; otherwise, the instantiation of rebind_alloc is ill-formed. //! //! In C++03 compilers `rebind_alloc` is a struct derived from an allocator //! deduced by previously detailed rules. template using rebind_alloc = see_documentation; //! In C++03 compilers `rebind_traits` is a struct derived from //! `allocator_traits`, where `OtherAlloc` is //! the allocator deduced by rules explained in `rebind_alloc`. template using rebind_traits = allocator_traits >; //! Non-standard extension: Portable allocator rebind for C++03 and C++11 compilers. //! `type` is an allocator related to Alloc deduced deduced by rules explained in `rebind_alloc`. template struct portable_rebind_alloc { typedef see_documentation type; }; #else //pointer typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, pointer, value_type*) pointer; //const_pointer typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Alloc, const_pointer, typename boost::intrusive::pointer_traits::template rebind_pointer) const_pointer; //reference typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, reference, typename container_detail::unvoid::type&) reference; //const_reference typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, const_reference, const typename container_detail::unvoid::type&) const_reference; //void_pointer typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Alloc, void_pointer, typename boost::intrusive::pointer_traits::template rebind_pointer) void_pointer; //const_void_pointer typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Alloc, const_void_pointer, typename boost::intrusive::pointer_traits::template rebind_pointer) const_void_pointer; //difference_type typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, difference_type, std::ptrdiff_t) difference_type; //size_type typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, size_type, std::size_t) size_type; //propagate_on_container_copy_assignment typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, propagate_on_container_copy_assignment, boost::false_type) propagate_on_container_copy_assignment; //propagate_on_container_move_assignment typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, propagate_on_container_move_assignment, boost::false_type) propagate_on_container_move_assignment; //propagate_on_container_swap typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, propagate_on_container_swap, boost::false_type) propagate_on_container_swap; #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) //C++11 template using rebind_alloc = typename boost::intrusive::detail::type_rebinder::type; template using rebind_traits = allocator_traits< rebind_alloc >; #else // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) //Some workaround for C++03 or C++11 compilers with no template aliases template struct rebind_alloc : boost::intrusive::detail::type_rebinder::type { typedef typename boost::intrusive::detail::type_rebinder::type Base; #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template rebind_alloc(BOOST_FWD_REF(Args)... args) : Base(boost::forward(args)...) {} #else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) #define BOOST_PP_LOCAL_MACRO(n) \ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ rebind_alloc(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ : Base(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)) \ {} \ // #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() #endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) }; template struct rebind_traits : allocator_traits::type> {}; #endif // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) template struct portable_rebind_alloc { typedef typename boost::intrusive::detail::type_rebinder::type type; }; #endif //BOOST_CONTAINER_DOXYGEN_INVOKED //! Returns: `a.allocate(n)` //! static pointer allocate(Alloc &a, size_type n) { return a.allocate(n); } //! Returns: `a.deallocate(p, n)` //! //! Throws: Nothing static void deallocate(Alloc &a, pointer p, size_type n) { return a.deallocate(p, n); } //! Effects: calls `a.allocate(n, p)` if that call is well-formed; //! otherwise, invokes `a.allocate(n)` static pointer allocate(Alloc &a, size_type n, const_void_pointer p) { const bool value = boost::container::container_detail:: has_member_function_callable_with_allocate ::value; ::boost::integral_constant flag; return allocator_traits::priv_allocate(flag, a, n, p); } //! Effects: calls `a.destroy(p)` if that call is well-formed; //! otherwise, invokes `p->~T()`. template static void destroy(Alloc &a, T*p) { typedef T* destroy_pointer; const bool value = boost::container::container_detail:: has_member_function_callable_with_destroy ::value; ::boost::integral_constant flag; allocator_traits::priv_destroy(flag, a, p); } //! Returns: `a.max_size()` if that expression is well-formed; otherwise, //! `numeric_limits::max()`. static size_type max_size(const Alloc &a) { const bool value = boost::container::container_detail:: has_member_function_callable_with_max_size ::value; ::boost::integral_constant flag; return allocator_traits::priv_max_size(flag, a); } //! Returns: `a.select_on_container_copy_construction()` if that expression is well-formed; //! otherwise, a. static Alloc select_on_container_copy_construction(const Alloc &a) { const bool value = boost::container::container_detail:: has_member_function_callable_with_select_on_container_copy_construction ::value; ::boost::integral_constant flag; return allocator_traits::priv_select_on_container_copy_construction(flag, a); } #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: calls `a.construct(p, std::forward(args)...)` if that call is well-formed; //! otherwise, invokes `::new (static_cast(p)) T(std::forward(args)...)` template static void construct(Alloc & a, T* p, BOOST_FWD_REF(Args)... args) { ::boost::integral_constant::value> flag; allocator_traits::priv_construct(flag, a, p, ::boost::forward(args)...); } #endif ///@cond #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) private: static pointer priv_allocate(boost::true_type, Alloc &a, size_type n, const_void_pointer p) { return a.allocate(n, p); } static pointer priv_allocate(boost::false_type, Alloc &a, size_type n, const_void_pointer) { return allocator_traits::allocate(a, n); } template static void priv_destroy(boost::true_type, Alloc &a, T* p) { a.destroy(p); } template static void priv_destroy(boost::false_type, Alloc &, T* p) { p->~T(); (void)p; } static size_type priv_max_size(boost::true_type, const Alloc &a) { return a.max_size(); } static size_type priv_max_size(boost::false_type, const Alloc &) { return (std::numeric_limits::max)(); } static Alloc priv_select_on_container_copy_construction(boost::true_type, const Alloc &a) { return a.select_on_container_copy_construction(); } static Alloc priv_select_on_container_copy_construction(boost::false_type, const Alloc &a) { return a; } #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template static void priv_construct(boost::false_type, Alloc &a, T *p, BOOST_FWD_REF(Args) ...args) { const bool value = boost::container::container_detail:: has_member_function_callable_with_construct < Alloc, T*, Args... >::value; ::boost::integral_constant flag; priv_construct_dispatch2(flag, a, p, ::boost::forward(args)...); } template static void priv_construct(boost::true_type, Alloc &a, T *p, BOOST_FWD_REF(Args) ...args) { priv_construct_dispatch2(boost::false_type(), a, p, ::boost::forward(args)...); } template static void priv_construct_dispatch2(boost::true_type, Alloc &a, T *p, BOOST_FWD_REF(Args) ...args) { a.construct( p, ::boost::forward(args)...); } template static void priv_construct_dispatch2(boost::false_type, Alloc &, T *p, BOOST_FWD_REF(Args) ...args) { ::new((void*)p) T(::boost::forward(args)...); } #else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) public: #define BOOST_PP_LOCAL_MACRO(n) \ template \ static void construct(Alloc &a, T *p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ ::boost::integral_constant::value> flag; \ allocator_traits::priv_construct(flag, a, p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ } \ // #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() private: #define BOOST_PP_LOCAL_MACRO(n) \ template \ static void priv_construct(boost::false_type, Alloc &a, T *p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST,_)) \ { \ const bool value = \ boost::container::container_detail::has_member_function_callable_with_construct \ < Alloc, T* BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_FWD_TYPE, _) >::value; \ ::boost::integral_constant flag; \ priv_construct_dispatch2(flag, a, p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ } \ \ template \ static void priv_construct(boost::true_type, Alloc &a, T *p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST,_)) \ { \ priv_construct_dispatch2(boost::false_type(), a, p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ } \ \ template \ static void priv_construct_dispatch2(boost::true_type, Alloc &a, T *p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST,_)) \ { a.construct( p BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); } \ \ template \ static void priv_construct_dispatch2(boost::false_type, Alloc &, T *p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \ { ::new((void*)p) T(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ // #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() #endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) ///@endcond }; } //namespace container { } //namespace boost { #include #endif // ! defined(BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP) container_fwd.hpp000444000765000024 1053212161110616 23620 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/container////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2005-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) // // 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 Allocator = std::allocator > class set; //multiset class template ,class Allocator = std::allocator > class multiset; //map class template ,class Allocator = std::allocator > > class map; //multimap class template ,class Allocator = std::allocator > > class multimap; //flat_set class template ,class Allocator = std::allocator > class flat_set; //flat_multiset class template ,class Allocator = std::allocator > class flat_multiset; //flat_map class template ,class Allocator = std::allocator > > class flat_map; //flat_multimap class template ,class Allocator = std::allocator > > class flat_multimap; //basic_string class template ,class Allocator = std::allocator > class basic_string; //! Type used to tag that the input range is //! guaranteed to be ordered struct ordered_range_t {}; //! Type used to tag that the input range is //! guaranteed to be ordered and unique struct ordered_unique_range_t : public ordered_range_t {}; //! Value used to tag that the input range is //! guaranteed to be ordered static const ordered_range_t ordered_range = ordered_range_t(); //! Value used to tag that the input range is //! guaranteed to be ordered and unique static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t(); /// @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 detail000755000765000024 012161110642 21350 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/containerconfig_begin.hpp000444000765000024 620212161110602 24623 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/container/detail////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2005-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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED #define BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED #include #endif //BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED #ifdef BOOST_MSVC #ifndef _CRT_SECURE_NO_DEPRECATE #define BOOST_CONTAINER_DETAIL_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 #pragma warning (disable : 4584) // X is already a base-class of Y #endif //BOOST_MSVC config_end.hpp000444000765000024 122012161110636 24307 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/container/detail////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2005-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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #if defined BOOST_MSVC #pragma warning (pop) #ifdef BOOST_CONTAINER_DETAIL_CRT_SECURE_NO_DEPRECATE #undef BOOST_CONTAINER_DETAIL_CRT_SECURE_NO_DEPRECATE #undef _CRT_SECURE_NO_DEPRECATE #endif #endif memory_util.hpp000444000765000024 1000212161110642 24574 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/container/detail////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_ALLOCATOR_MEMORY_UTIL_HPP #define BOOST_CONTAINER_ALLOCATOR_MEMORY_UTIL_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include #include #include #include #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME allocate #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 2, )) #include BOOST_PP_ITERATE() #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME destroy #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 3, )) #include BOOST_PP_ITERATE() #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME max_size #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 0, )) #include BOOST_PP_ITERATE() #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME select_on_container_copy_construction #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 0, )) #include BOOST_PP_ITERATE() #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME construct #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS+1, )) #include BOOST_PP_ITERATE() namespace boost { namespace container { namespace container_detail { BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(pointer) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_pointer) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(reference) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_reference) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(void_pointer) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_void_pointer) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(size_type) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_copy_assignment) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_move_assignment) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_swap) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type) } //namespace container_detail { } //namespace container { } //namespace boost { #include #endif // ! defined(BOOST_CONTAINER_ALLOCATOR_MEMORY_UTIL_HPP) mpl.hpp000444000765000024 673412161110641 23017 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/container/detail////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2005-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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP #define BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include namespace boost { namespace container { namespace container_detail { template struct integral_constant { static const T value = val; typedef integral_constant type; }; template< bool C_ > struct bool_ : integral_constant { static const bool value = C_; operator bool() const { return bool_::value; } }; typedef bool_ true_; typedef bool_ false_; typedef true_ true_type; typedef false_ false_type; typedef char yes_type; struct no_type { char padding[8]; }; 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 {}; template struct disable_if_c : public enable_if_c {}; 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) }; }; template< bool C , typename T1 , typename T2 > struct if_c { typedef T1 type; }; template< typename T1 , typename T2 > struct if_c { typedef T2 type; }; template< typename T1 , typename T2 , typename T3 > struct if_ { typedef typename if_c<0 != T1::value, T2, T3>::type type; }; template struct select1st // : public std::unary_function { template const typename Pair::first_type& operator()(const OtherPair& x) const { return x.first; } const typename Pair::first_type& operator()(const typename Pair::first_type& x) const { return x; } }; // identity is an extension: it is not part of the standard. template struct identity // : public std::unary_function { typedef T type; const T& operator()(const T& x) const { return x; } }; template struct ls_zeros { static const std::size_t value = (S & std::size_t(1)) ? 0 : (1u + ls_zeros<(S >> 1u)>::value); }; template<> struct ls_zeros<0> { static const std::size_t value = 0; }; template<> struct ls_zeros<1> { static const std::size_t value = 0; }; template struct unvoid { typedef T type; }; template <> struct unvoid { struct type { }; }; template <> struct unvoid { struct type { }; }; } //namespace container_detail { } //namespace container { } //namespace boost { #endif //#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP preprocessor.hpp000444000765000024 1667712161110614 25004 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/container/detail////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2008-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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP #define BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include #include #include #ifdef BOOST_CONTAINER_PERFECT_FORWARDING //#error "This file is not needed when perfect forwarding is available" #endif //BOOST_CONTAINER_PERFECT_FORWARDING #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS 10 //Note: //We define template parameters as const references to //be able to bind temporaries. After that we will un-const them. //This cast is ugly but it is necessary until "perfect forwarding" //is achieved in C++0x. Meanwhile, if we want to be able to //bind rvalues with non-const references, we have to be ugly #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_CONTAINER_PP_PARAM_LIST(z, n, data) \ BOOST_PP_CAT(P, n) && BOOST_PP_CAT(p, n) \ //! #else #define BOOST_CONTAINER_PP_PARAM_LIST(z, n, data) \ const BOOST_PP_CAT(P, n) & BOOST_PP_CAT(p, n) \ //! #endif //#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_CONTAINER_PP_CONST_REF_PARAM_LIST_Q(z, n, Data) \ const BOOST_PP_CAT(Q, n) & BOOST_PP_CAT(q, n) \ //! #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_CONTAINER_PP_PARAM(U, u) \ U && u \ //! #else #define BOOST_CONTAINER_PP_PARAM(U, u) \ const U & u \ //! #endif //#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_CONTAINER_PP_PARAM_INIT(z, n, data) \ BOOST_PP_CAT(m_p, n) (::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) )) \ //! #else //BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_CONTAINER_PP_PARAM_INIT(z, n, data) \ BOOST_PP_CAT(m_p, n) (const_cast(BOOST_PP_CAT(p, n))) \ //! #endif //#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) namespace boost { namespace container { namespace container_detail { template struct ref_holder; template struct ref_holder { explicit ref_holder(T &t) : t_(t) {} T &t_; T & get() { return t_; } }; template struct ref_holder { explicit ref_holder(const T &t) : t_(t) {} const T &t_; const T & get() { return t_; } }; template struct ref_holder { explicit ref_holder(const T &t) : t_(t) {} const T &t_; const T & get() { return t_; } }; template struct ref_holder { explicit ref_holder(T &&t) : t_(t) {} T &t_; T && get() { return ::boost::move(t_); } }; template struct ref_holder { explicit ref_holder(T &&t) : t_(t) {} T &t_; T && get() { return ::boost::move(t_); } }; } //namespace container_detail { } //namespace container { } //namespace boost { #define BOOST_CONTAINER_PP_PARAM_DEFINE(z, n, data) \ ::boost::container::container_detail::ref_holder BOOST_PP_CAT(m_p, n); \ //! #else //BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG #define BOOST_CONTAINER_PP_PARAM_DEFINE(z, n, data) \ BOOST_PP_CAT(P, n) && BOOST_PP_CAT(m_p, n); \ //! #endif //defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) #else //BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_CONTAINER_PP_PARAM_DEFINE(z, n, data) \ BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ //! #endif //#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) #define BOOST_CONTAINER_PP_MEMBER_FORWARD(z, n, data) BOOST_PP_CAT(this->m_p, n).get() \ //! #else //!defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) #define BOOST_CONTAINER_PP_MEMBER_FORWARD(z, n, data) \ ::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(this->m_p, n) ) \ //! #endif //!defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) #define BOOST_CONTAINER_PP_PARAM_INC(z, n, data) \ BOOST_PP_CAT(++this->m_p, n) \ //! #define BOOST_CONTAINER_PP_IDENTITY(z, n, data) data #define BOOST_CONTAINER_PP_PARAM_FORWARD(z, n, data) \ ::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) ) \ //! #define BOOST_CONTAINER_PP_DECLVAL(z, n, data) \ ::boost::move_detail::declval< BOOST_PP_CAT(P, n) >() \ //! #define BOOST_CONTAINER_PP_MEMBER_IT_FORWARD(z, n, data) \ BOOST_PP_CAT(*this->m_p, n) \ //! #define BOOST_CONTAINER_PP_TEMPLATE_PARAM_VOID_DEFAULT(z, n, data) \ BOOST_PP_CAT(class P, n) = void \ //! #define BOOST_CONTAINER_PP_TEMPLATE_PARAM_WITH_DEFAULT(z, n, default_type) \ BOOST_PP_CAT(class P, n) = default_type \ //! #define BOOST_CONTAINER_PP_STATIC_PARAM_REF_DECLARE(z, n, data) \ static BOOST_PP_CAT(P, n) & BOOST_PP_CAT(p, n); \ //! #define BOOST_CONTAINER_PP_PARAM_PASS(z, n, data) \ BOOST_PP_CAT(p, n) \ //! #define BOOST_CONTAINER_PP_FWD_TYPE(z, n, data) \ typename ::boost::move_detail::forward_type< BOOST_PP_CAT(P, n) >::type \ //! #include //#else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //#error "This file is not needed when perfect forwarding is available" //#endif //BOOST_CONTAINER_PERFECT_FORWARDING #endif //#ifndef BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP workaround.hpp000444000765000024 316712161110601 24413 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/container/detail////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2005-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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP #define BOOST_CONTAINER_DETAIL_WORKAROUND_HPP #include #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\ && !defined(BOOST_INTERPROCESS_DISABLE_VARIADIC_TMPL) #define BOOST_CONTAINER_PERFECT_FORWARDING #endif #if defined(BOOST_NO_CXX11_NOEXCEPT) #if defined(BOOST_MSVC) #define BOOST_CONTAINER_NOEXCEPT throw() #else #define BOOST_CONTAINER_NOEXCEPT #endif #define BOOST_CONTAINER_NOEXCEPT_IF(x) #else #define BOOST_CONTAINER_NOEXCEPT noexcept #define BOOST_CONTAINER_NOEXCEPT_IF(x) noexcept(x) #endif #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && defined(__GXX_EXPERIMENTAL_CXX0X__)\ && (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40700) #define BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST #endif //Macros for documentation purposes. For code, expands to the argument #define BOOST_CONTAINER_IMPDEF(TYPE) TYPE #define BOOST_CONTAINER_SEEDOC(TYPE) TYPE #include #endif //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP detail000755000765000024 012161110700 17361 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostallocator_utilities.hpp000444000765000024 1246412161110616 24337 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail/* Copyright 2003-2009 Joaquin M Lopez Munoz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See Boost website at http://www.boost.org/ */ #ifndef BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP #define BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP #include /* keep it first to prevent nasty warns in MSVC */ #include #include #include #include #include #include #include namespace boost{ namespace detail{ /* Allocator adaption layer. Some stdlibs provide allocators without rebind * and template ctors. These facilities are simulated with the external * template class rebind_to and the aid of partial_std_allocator_wrapper. */ namespace allocator{ /* partial_std_allocator_wrapper inherits the functionality of a std * allocator while providing a templatized ctor and other bits missing * in some stdlib implementation or another. */ template class partial_std_allocator_wrapper:public std::allocator { public: /* Oddly enough, STLport does not define std::allocator::value_type * when configured to work without partial template specialization. * No harm in supplying the definition here unconditionally. */ typedef Type value_type; partial_std_allocator_wrapper(){}; template partial_std_allocator_wrapper(const partial_std_allocator_wrapper&){} partial_std_allocator_wrapper(const std::allocator& x): std::allocator(x) { }; #if defined(BOOST_DINKUMWARE_STDLIB) /* Dinkumware guys didn't provide a means to call allocate() without * supplying a hint, in disagreement with the standard. */ Type* allocate(std::size_t n,const void* hint=0) { std::allocator& a=*this; return a.allocate(n,hint); } #endif }; /* Detects whether a given allocator belongs to a defective stdlib not * having the required member templates. * Note that it does not suffice to check the Boost.Config stdlib * macros, as the user might have passed a custom, compliant allocator. * The checks also considers partial_std_allocator_wrapper to be * a standard defective allocator. */ #if defined(BOOST_NO_STD_ALLOCATOR)&&\ (defined(BOOST_HAS_PARTIAL_STD_ALLOCATOR)||defined(BOOST_DINKUMWARE_STDLIB)) template struct is_partial_std_allocator { BOOST_STATIC_CONSTANT(bool, value= (is_same< std::allocator, Allocator >::value)|| (is_same< partial_std_allocator_wrapper< BOOST_DEDUCED_TYPENAME Allocator::value_type>, Allocator >::value)); }; #else template struct is_partial_std_allocator { BOOST_STATIC_CONSTANT(bool,value=false); }; #endif /* rebind operations for defective std allocators */ template struct partial_std_allocator_rebind_to { typedef partial_std_allocator_wrapper type; }; /* rebind operation in all other cases */ #if BOOST_WORKAROUND(BOOST_MSVC,<1300) /* Workaround for a problem in MSVC with dependent template typedefs * when doing rebinding of allocators. * Modeled after (thanks, Aleksey!) */ template struct rebinder { template struct fake_allocator:Allocator{}; template<> struct fake_allocator { template struct rebind{}; }; template struct result: fake_allocator::value>:: template rebind { }; }; #else template struct rebinder { template struct result { typedef typename Allocator::BOOST_NESTED_TEMPLATE rebind::other other; }; }; #endif template struct compliant_allocator_rebind_to { typedef typename rebinder:: BOOST_NESTED_TEMPLATE result::other type; }; /* rebind front-end */ template struct rebind_to: mpl::eval_if_c< is_partial_std_allocator::value, partial_std_allocator_rebind_to, compliant_allocator_rebind_to > { }; /* allocator-independent versions of construct and destroy */ template void construct(void* p,const Type& t) { new (p) Type(t); } #if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500)) /* MSVC++ issues spurious warnings about unreferencend formal parameters * in destroy when Type is a class with trivial dtor. */ #pragma warning(push) #pragma warning(disable:4100) #endif template void destroy(const Type* p) { #if BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x590)) const_cast(p)->~Type(); #else p->~Type(); #endif } #if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500)) #pragma warning(pop) #endif } /* namespace boost::detail::allocator */ } /* namespace boost::detail */ } /* namespace boost */ #endif atomic_count.hpp000444000765000024 117712161110657 22734 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail#ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED #define BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif // // boost/detail/atomic_count.hpp - thread/SMP safe reference counter // // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt #include #endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED binary_search.hpp000444000765000024 1465612161110651 23101 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// 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_ call_traits.hpp000444000765000024 1061612161110700 22554 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// (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 #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 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, ::boost::is_enum::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 compressed_pair.hpp000444000765000024 4114412161110610 23432 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. // Use, modification and distribution are subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt). // // See http://www.boost.org/libs/utility for most recent version including documentation. // compressed_pair: pair that "compresses" empty members // (see libs/utility/compressed_pair.htm) // // JM changes 25 Jan 2004: // For the case where T1 == T2 and both are empty, then first() and second() // should return different objects. // JM changes 25 Jan 2000: // Removed default arguments from compressed_pair_switch to get // C++ Builder 4 to accept them // rewriten swap to get gcc and C++ builder to compile. // added partial specialisations for case T1 == T2 to avoid duplicate constructor defs. #ifndef BOOST_DETAIL_COMPRESSED_PAIR_HPP #define BOOST_DETAIL_COMPRESSED_PAIR_HPP #include #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable:4512) #endif namespace boost { template class compressed_pair; // compressed_pair namespace details { // JM altered 26 Jan 2000: template struct compressed_pair_switch; template struct compressed_pair_switch {static const int value = 0;}; template struct compressed_pair_switch {static const int value = 3;}; template struct compressed_pair_switch {static const int value = 1;}; template struct compressed_pair_switch {static const int value = 2;}; template struct compressed_pair_switch {static const int value = 4;}; template struct compressed_pair_switch {static const int value = 5;}; template class compressed_pair_imp; #ifdef __GNUC__ // workaround for GCC (JM): using std::swap; #endif // // can't call unqualified swap from within classname::swap // as Koenig lookup rules will find only the classname::swap // member function not the global declaration, so use cp_swap // as a forwarding function (JM): template inline void cp_swap(T& t1, T& t2) { #ifndef __GNUC__ using std::swap; #endif swap(t1, t2); } // 0 derive from neither template class compressed_pair_imp { public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_imp() {} compressed_pair_imp(first_param_type x, second_param_type y) : first_(x), second_(y) {} compressed_pair_imp(first_param_type x) : first_(x) {} compressed_pair_imp(second_param_type y) : second_(y) {} first_reference first() {return first_;} first_const_reference first() const {return first_;} second_reference second() {return second_;} second_const_reference second() const {return second_;} void swap(::boost::compressed_pair& y) { cp_swap(first_, y.first()); cp_swap(second_, y.second()); } private: first_type first_; second_type second_; }; // 1 derive from T1 template class compressed_pair_imp : protected ::boost::remove_cv::type { public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_imp() {} compressed_pair_imp(first_param_type x, second_param_type y) : first_type(x), second_(y) {} compressed_pair_imp(first_param_type x) : first_type(x) {} compressed_pair_imp(second_param_type y) : second_(y) {} first_reference first() {return *this;} first_const_reference first() const {return *this;} second_reference second() {return second_;} second_const_reference second() const {return second_;} void swap(::boost::compressed_pair& y) { // no need to swap empty base class: cp_swap(second_, y.second()); } private: second_type second_; }; // 2 derive from T2 template class compressed_pair_imp : protected ::boost::remove_cv::type { public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_imp() {} compressed_pair_imp(first_param_type x, second_param_type y) : second_type(y), first_(x) {} compressed_pair_imp(first_param_type x) : first_(x) {} compressed_pair_imp(second_param_type y) : second_type(y) {} first_reference first() {return first_;} first_const_reference first() const {return first_;} second_reference second() {return *this;} second_const_reference second() const {return *this;} void swap(::boost::compressed_pair& y) { // no need to swap empty base class: cp_swap(first_, y.first()); } private: first_type first_; }; // 3 derive from T1 and T2 template class compressed_pair_imp : protected ::boost::remove_cv::type, protected ::boost::remove_cv::type { public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_imp() {} compressed_pair_imp(first_param_type x, second_param_type y) : first_type(x), second_type(y) {} compressed_pair_imp(first_param_type x) : first_type(x) {} compressed_pair_imp(second_param_type y) : second_type(y) {} first_reference first() {return *this;} first_const_reference first() const {return *this;} second_reference second() {return *this;} second_const_reference second() const {return *this;} // // no need to swap empty bases: void swap(::boost::compressed_pair&) {} }; // JM // 4 T1 == T2, T1 and T2 both empty // Originally this did not store an instance of T2 at all // but that led to problems beause it meant &x.first() == &x.second() // which is not true for any other kind of pair, so now we store an instance // of T2 just in case the user is relying on first() and second() returning // different objects (albeit both empty). template class compressed_pair_imp : protected ::boost::remove_cv::type { public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_imp() {} compressed_pair_imp(first_param_type x, second_param_type y) : first_type(x), m_second(y) {} compressed_pair_imp(first_param_type x) : first_type(x), m_second(x) {} first_reference first() {return *this;} first_const_reference first() const {return *this;} second_reference second() {return m_second;} second_const_reference second() const {return m_second;} void swap(::boost::compressed_pair&) {} private: T2 m_second; }; // 5 T1 == T2 and are not empty: //JM template class compressed_pair_imp { public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_imp() {} compressed_pair_imp(first_param_type x, second_param_type y) : first_(x), second_(y) {} compressed_pair_imp(first_param_type x) : first_(x), second_(x) {} first_reference first() {return first_;} first_const_reference first() const {return first_;} second_reference second() {return second_;} second_const_reference second() const {return second_;} void swap(::boost::compressed_pair& y) { cp_swap(first_, y.first()); cp_swap(second_, y.second()); } private: first_type first_; second_type second_; }; } // details template class compressed_pair : private ::boost::details::compressed_pair_imp::type, typename remove_cv::type>::value, ::boost::is_empty::value, ::boost::is_empty::value>::value> { private: typedef details::compressed_pair_imp::type, typename remove_cv::type>::value, ::boost::is_empty::value, ::boost::is_empty::value>::value> base; public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair() : base() {} compressed_pair(first_param_type x, second_param_type y) : base(x, y) {} explicit compressed_pair(first_param_type x) : base(x) {} explicit compressed_pair(second_param_type y) : base(y) {} first_reference first() {return base::first();} first_const_reference first() const {return base::first();} second_reference second() {return base::second();} second_const_reference second() const {return base::second();} void swap(compressed_pair& y) { base::swap(y); } }; // JM // Partial specialisation for case where T1 == T2: // template class compressed_pair : private details::compressed_pair_imp::type, typename remove_cv::type>::value, ::boost::is_empty::value, ::boost::is_empty::value>::value> { private: typedef details::compressed_pair_imp::type, typename remove_cv::type>::value, ::boost::is_empty::value, ::boost::is_empty::value>::value> base; public: typedef T first_type; typedef T second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair() : base() {} compressed_pair(first_param_type x, second_param_type y) : base(x, y) {} #if !(defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) explicit #endif compressed_pair(first_param_type x) : base(x) {} first_reference first() {return base::first();} first_const_reference first() const {return base::first();} second_reference second() {return base::second();} second_const_reference second() const {return base::second();} void swap(::boost::compressed_pair& y) { base::swap(y); } }; template inline void swap(compressed_pair& x, compressed_pair& y) { x.swap(y); } } // boost #ifdef BOOST_MSVC # pragma warning(pop) #endif #endif // BOOST_DETAIL_COMPRESSED_PAIR_HPP container_fwd.hpp000444000765000024 1260212161110670 23100 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail // 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. // // // // BOOST_DETAIL_CONTAINER_FWD to make it foward declare containers even if it // // normally doesn't. // // // // BOOST_DETAIL_NO_CONTAINER_FWD overrides BOOST_DETAIL_CONTAINER_FWD. // // // //////////////////////////////////////////////////////////////////////////////// #if !defined(BOOST_DETAIL_NO_CONTAINER_FWD) # if defined(BOOST_DETAIL_CONTAINER_FWD) // Force forward declarations. # elif 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 #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 dynamic_bitset.hpp000444000765000024 1570512161110612 23257 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// ----------------------------------------------------------- // // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek // Copyright (c) 2003-2006, 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_DETAIL_DYNAMIC_BITSET_HPP #define BOOST_DETAIL_DYNAMIC_BITSET_HPP #include #include "boost/config.hpp" #include "boost/detail/workaround.hpp" namespace boost { namespace detail { namespace dynamic_bitset_impl { // Gives (read-)access to the object representation // of an object of type T (3.9p4). CANNOT be used // on a base sub-object // template inline const unsigned char * object_representation (T* p) { return static_cast(static_cast(p)); } template struct shifter { static void left_shift(T & v) { amount >= width ? (v = 0) : (v >>= BOOST_DYNAMIC_BITSET_WRAP_CONSTANT(amount)); } }; // ------- count function implementation -------------- typedef unsigned char byte_type; // These two entities // // enum mode { access_by_bytes, access_by_blocks }; // template struct mode_to_type {}; // // were removed, since the regression logs (as of 24 Aug 2008) // showed that several compilers had troubles with recognizing // // const mode m = access_by_bytes // // as a constant expression // // * So, we'll use bool, instead of enum *. // template struct value_to_type { value_to_type() {} }; const bool access_by_bytes = true; const bool access_by_blocks = false; // the table: wrapped in a class template, so // that it is only instantiated if/when needed // template struct count_table { static const byte_type table[]; }; template <> struct count_table { /* no table */ }; const unsigned int table_width = 8; template const byte_type count_table::table[] = { // Automatically generated by GPTableGen.exe v.1.0 // 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 }; // overload for access by bytes // template inline std::size_t do_count(Iterator first, std::size_t length, int /*dummy param*/, value_to_type* ) { std::size_t num = 0; if (length) { const byte_type * p = object_representation(&*first); length *= sizeof(*first); do { num += count_table<>::table[*p]; ++p; --length; } while (length); } return num; } // overload for access by blocks // template inline std::size_t do_count(Iterator first, std::size_t length, ValueType, value_to_type*) { std::size_t num = 0; while (length){ ValueType value = *first; while (value) { num += count_table<>::table[value & ((1u<>= table_width; } ++first; --length; } return num; } // ------------------------------------------------------- // Some library implementations simply return a dummy // value such as // // size_type(-1) / sizeof(T) // // from vector<>::max_size. This tries to get more // meaningful info. // template typename T::size_type vector_max_size_workaround(const T & v) { typedef typename T::allocator_type allocator_type; const typename allocator_type::size_type alloc_max = v.get_allocator().max_size(); const typename T::size_type container_max = v.max_size(); return alloc_max < container_max? alloc_max : container_max; } // for static_asserts template struct allowed_block_type { enum { value = T(-1) > 0 }; // ensure T has no sign }; template <> struct allowed_block_type { enum { value = false }; }; template struct is_numeric { enum { value = false }; }; # define BOOST_dynamic_bitset_is_numeric(x) \ template<> \ struct is_numeric< x > { \ enum { value = true }; \ } /**/ BOOST_dynamic_bitset_is_numeric(bool); BOOST_dynamic_bitset_is_numeric(char); #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) BOOST_dynamic_bitset_is_numeric(wchar_t); #endif BOOST_dynamic_bitset_is_numeric(signed char); BOOST_dynamic_bitset_is_numeric(short int); BOOST_dynamic_bitset_is_numeric(int); BOOST_dynamic_bitset_is_numeric(long int); BOOST_dynamic_bitset_is_numeric(unsigned char); BOOST_dynamic_bitset_is_numeric(unsigned short); BOOST_dynamic_bitset_is_numeric(unsigned int); BOOST_dynamic_bitset_is_numeric(unsigned long); #if defined(BOOST_HAS_LONG_LONG) BOOST_dynamic_bitset_is_numeric(::boost::long_long_type); BOOST_dynamic_bitset_is_numeric(::boost::ulong_long_type); #endif // intentionally omitted //BOOST_dynamic_bitset_is_numeric(float); //BOOST_dynamic_bitset_is_numeric(double); //BOOST_dynamic_bitset_is_numeric(long double); #undef BOOST_dynamic_bitset_is_numeric } // dynamic_bitset_impl } // namespace detail } // namespace boost #endif // include guard endian.hpp000444000765000024 544512161110645 21505 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// 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 fenv.hpp000444000765000024 441412161110654 21200 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail/*============================================================================= 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 */ indirect_traits.hpp000444000765000024 2657312161110626 23462 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// 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 interlocked.hpp000444000765000024 1641712161110651 22570 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail#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) #if _WIN32_WCE >= 0x600 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 ); # 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 #else // 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 #endif # 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 is_function_ref_tester.hpp000444000765000024 1765612161110621 25032 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail // (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 is_incrementable.hpp000444000765000024 743712161110646 23556 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// Copyright David Abrahams 2004. Use, modification and distribution is // subject to the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef IS_INCREMENTABLE_DWA200415_HPP # define IS_INCREMENTABLE_DWA200415_HPP # include # include # include # include # include // Must be the last include # include namespace boost { namespace detail { // is_incrementable metafunction // // Requires: Given x of type T&, if the expression ++x is well-formed // it must have complete type; otherwise, it must neither be ambiguous // nor violate access. // This namespace ensures that ADL doesn't mess things up. namespace is_incrementable_ { // a type returned from operator++ when no increment is found in the // type's own namespace struct tag {}; // any soaks up implicit conversions and makes the following // operator++ less-preferred than any other such operator that // might be found via ADL. struct any { template any(T const&); }; // This is a last-resort operator++ for when none other is found # if BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2 } namespace is_incrementable_2 { is_incrementable_::tag operator++(is_incrementable_::any const&); is_incrementable_::tag operator++(is_incrementable_::any const&,int); } using namespace is_incrementable_2; namespace is_incrementable_ { # else tag operator++(any const&); tag operator++(any const&,int); # endif # if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \ || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) # define BOOST_comma(a,b) (a) # else // In case an operator++ is found that returns void, we'll use ++x,0 tag operator,(tag,int); # define BOOST_comma(a,b) (a,b) # endif # if defined(BOOST_MSVC) # pragma warning(push) # pragma warning(disable:4913) // Warning about operator, # endif // two check overloads help us identify which operator++ was picked char (& check_(tag) )[2]; template char check_(T const&); template struct impl { static typename boost::remove_cv::type& x; BOOST_STATIC_CONSTANT( bool , value = sizeof(is_incrementable_::check_(BOOST_comma(++x,0))) == 1 ); }; template struct postfix_impl { static typename boost::remove_cv::type& x; BOOST_STATIC_CONSTANT( bool , value = sizeof(is_incrementable_::check_(BOOST_comma(x++,0))) == 1 ); }; # if defined(BOOST_MSVC) # pragma warning(pop) # endif } # undef BOOST_comma template struct is_incrementable BOOST_TT_AUX_BOOL_C_BASE(::boost::detail::is_incrementable_::impl::value) { BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(::boost::detail::is_incrementable_::impl::value) BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_incrementable,(T)) }; template struct is_postfix_incrementable BOOST_TT_AUX_BOOL_C_BASE(::boost::detail::is_incrementable_::impl::value) { BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(::boost::detail::is_incrementable_::postfix_impl::value) BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_postfix_incrementable,(T)) }; } // namespace detail BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1, ::boost::detail::is_incrementable) BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1, ::boost::detail::is_postfix_incrementable) } // namespace boost # include #endif // IS_INCREMENTABLE_DWA200415_HPP is_xxx.hpp000444000765000024 647012161110652 21566 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// Copyright David Abrahams 2005. Distributed under the Boost // Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_DETAIL_IS_XXX_DWA20051011_HPP # define BOOST_DETAIL_IS_XXX_DWA20051011_HPP # include # include # include # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) # include # include # define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \ template \ struct is_##name \ { \ typedef char yes; \ typedef char (&no)[2]; \ \ static typename add_reference::type dummy; \ \ struct helpers \ { \ template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \ static yes test( \ qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \ ); \ \ template \ static no test(U&, ...); \ }; \ \ BOOST_STATIC_CONSTANT( \ bool, value \ = !is_reference::value \ & (sizeof(helpers::test(dummy, 0)) == sizeof(yes))); \ \ typedef mpl::bool_ type; \ }; # else # define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \ template \ struct is_##name : mpl::false_ \ { \ }; \ \ template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class T) > \ struct is_##name< \ qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, T) > \ > \ : mpl::true_ \ { \ }; # endif #endif // BOOST_DETAIL_IS_XXX_DWA20051011_HPP iterator.hpp000444000765000024 3770612161110676 22131 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// (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_ lcast_precision.hpp000444000765000024 1407612161110663 23450 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// 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 lightweight_mutex.hpp000444000765000024 121412161110625 23774 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail#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 limits.hpp000444000765000024 4120712161110647 21566 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// 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: no_exceptions_support.hpp000444000765000024 404412161110602 24703 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail#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 numeric_traits.hpp000444000765000024 1545312161110616 23315 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// (C) Copyright David Abrahams 2001, Howard Hinnant 2001. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // Template class numeric_traits -- // // Supplies: // // typedef difference_type -- a type used to represent the difference // between any two values of Number. // // Support: // 1. Not all specializations are supplied // // 2. Use of specializations that are not supplied will cause a // compile-time error // // 3. Users are free to specialize numeric_traits for any type. // // 4. Right now, specializations are only supplied for integer types. // // 5. On implementations which do not supply compile-time constants in // std::numeric_limits<>, only specializations for built-in integer types // are supplied. // // 6. Handling of numbers whose range of representation is at least as // great as boost::intmax_t can cause some differences to be // unrepresentable in difference_type: // // Number difference_type // ------ --------------- // signed Number // unsigned intmax_t // // template typename numeric_traits::difference_type // numeric_distance(Number x, Number y) // computes (y - x), attempting to avoid overflows. // // See http://www.boost.org for most recent version including documentation. // Revision History // 11 Feb 2001 - Use BOOST_STATIC_CONSTANT (David Abrahams) // 11 Feb 2001 - Rolled back ineffective Borland-specific code // (David Abrahams) // 10 Feb 2001 - Rolled in supposed Borland fixes from John Maddock, but // not seeing any improvement yet (David Abrahams) // 06 Feb 2001 - Factored if_true out into boost/detail/select_type.hpp // (David Abrahams) // 23 Jan 2001 - Fixed logic of difference_type selection, which was // completely wack. In the process, added digit_traits<> // to compute the number of digits in intmax_t even when // not supplied by numeric_limits<>. (David Abrahams) // 21 Jan 2001 - Created (David Abrahams) #ifndef BOOST_NUMERIC_TRAITS_HPP_DWA20001901 # define BOOST_NUMERIC_TRAITS_HPP_DWA20001901 # include # include # include # include # include # include namespace boost { namespace detail { // Template class is_signed -- determine whether a numeric type is signed // Requires that T is constructable from the literals -1 and 0. Compile-time // error results if that requirement is not met (and thus signedness is not // likely to have meaning for that type). template struct is_signed { #if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || defined(BOOST_MSVC) && BOOST_MSVC <= 1300 BOOST_STATIC_CONSTANT(bool, value = (Number(-1) < Number(0))); #else BOOST_STATIC_CONSTANT(bool, value = std::numeric_limits::is_signed); #endif }; # ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS // digit_traits - compute the number of digits in a built-in integer // type. Needed for implementations on which numeric_limits is not specialized // for intmax_t (e.g. VC6). template struct digit_traits_select; // numeric_limits is specialized; just select that version of digits template <> struct digit_traits_select { template struct traits { BOOST_STATIC_CONSTANT(int, digits = std::numeric_limits::digits); }; }; // numeric_limits is not specialized; compute digits from sizeof(T) template <> struct digit_traits_select { template struct traits { BOOST_STATIC_CONSTANT(int, digits = ( sizeof(T) * std::numeric_limits::digits - (is_signed::value ? 1 : 0)) ); }; }; // here's the "usable" template template struct digit_traits { typedef digit_traits_select< ::std::numeric_limits::is_specialized> selector; typedef typename selector::template traits traits; BOOST_STATIC_CONSTANT(int, digits = traits::digits); }; #endif // Template class integer_traits -- traits of various integer types // This should probably be rolled into boost::integer_traits one day, but I // need it to work without template struct integer_traits { # ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS private: typedef Integer integer_type; typedef std::numeric_limits x; # if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 // for some reason, MSVC asserts when it shouldn't unless we make these // local definitions BOOST_STATIC_CONSTANT(bool, is_integer = x::is_integer); BOOST_STATIC_CONSTANT(bool, is_specialized = x::is_specialized); BOOST_STATIC_ASSERT(is_integer); BOOST_STATIC_ASSERT(is_specialized); # endif public: typedef typename if_true<(int(x::is_signed) && (!int(x::is_bounded) // digits is the number of no-sign bits || (int(x::digits) + 1 >= digit_traits::digits)))>::template then< Integer, typename if_true<(int(x::digits) + 1 < digit_traits::digits)>::template then< signed int, typename if_true<(int(x::digits) + 1 < digit_traits::digits)>::template then< signed long, // else intmax_t >::type>::type>::type difference_type; #else BOOST_STATIC_ASSERT(boost::is_integral::value); typedef typename if_true<(sizeof(Integer) >= sizeof(intmax_t))>::template then< typename if_true<(is_signed::value)>::template then< Integer, intmax_t >::type, typename if_true<(sizeof(Integer) < sizeof(std::ptrdiff_t))>::template then< std::ptrdiff_t, intmax_t >::type >::type difference_type; # endif }; // Right now, only supports integers, but should be expanded. template struct numeric_traits { typedef typename integer_traits::difference_type difference_type; }; template typename numeric_traits::difference_type numeric_distance(Number x, Number y) { typedef typename numeric_traits::difference_type difference_type; return difference_type(y) - difference_type(x); } }} #endif // BOOST_NUMERIC_TRAITS_HPP_DWA20001901 ob_call_traits.hpp000444000765000024 765612161110602 23227 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// (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 ob_compressed_pair.hpp000444000765000024 4156512161110602 24122 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. // Use, modification and distribution are subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt). // // See http://www.boost.org/libs/utility for most recent version including documentation. // see libs/utility/compressed_pair.hpp // /* Release notes: 20 Jan 2001: Fixed obvious bugs (David Abrahams) 07 Oct 2000: Added better single argument constructor support. 03 Oct 2000: Added VC6 support (JM). 23rd July 2000: Additional comments added. (JM) Jan 2000: Original version: this version crippled for use with crippled compilers - John Maddock Jan 2000. */ #ifndef BOOST_OB_COMPRESSED_PAIR_HPP #define BOOST_OB_COMPRESSED_PAIR_HPP #include #ifndef BOOST_OBJECT_TYPE_TRAITS_HPP #include #endif #ifndef BOOST_SAME_TRAITS_HPP #include #endif #ifndef BOOST_CALL_TRAITS_HPP #include #endif namespace boost { #ifdef BOOST_MSVC6_MEMBER_TEMPLATES // // use member templates to emulate // partial specialisation. Note that due to // problems with overload resolution with VC6 // each of the compressed_pair versions that follow // have one template single-argument constructor // in place of two specific constructors: // template class compressed_pair; namespace detail{ template struct best_conversion_traits { typedef char one; typedef char (&two)[2]; static A a; static one test(T1); static two test(T2); enum { value = sizeof(test(a)) }; }; template struct init_one; template <> struct init_one<1> { template static void init(const A& a, T1* p1, T2*) { *p1 = a; } }; template <> struct init_one<2> { template static void init(const A& a, T1*, T2* p2) { *p2 = a; } }; // T1 != T2, both non-empty template class compressed_pair_0 { private: T1 _first; T2 _second; public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_0() : _first(), _second() {} compressed_pair_0(first_param_type x, second_param_type y) : _first(x), _second(y) {} template explicit compressed_pair_0(const A& val) { init_one::value>::init(val, &_first, &_second); } compressed_pair_0(const ::boost::compressed_pair& x) : _first(x.first()), _second(x.second()) {} #if 0 compressed_pair_0& operator=(const compressed_pair_0& x) { cout << "assigning compressed pair 0" << endl; _first = x._first; _second = x._second; cout << "finished assigning compressed pair 0" << endl; return *this; } #endif first_reference first() { return _first; } first_const_reference first() const { return _first; } second_reference second() { return _second; } second_const_reference second() const { return _second; } void swap(compressed_pair_0& y) { using std::swap; swap(_first, y._first); swap(_second, y._second); } }; // T1 != T2, T2 empty template class compressed_pair_1 : T2 { private: T1 _first; public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_1() : T2(), _first() {} compressed_pair_1(first_param_type x, second_param_type y) : T2(y), _first(x) {} template explicit compressed_pair_1(const A& val) { init_one::value>::init(val, &_first, static_cast(this)); } compressed_pair_1(const ::boost::compressed_pair& x) : T2(x.second()), _first(x.first()) {} #if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 // Total weirdness. If the assignment to _first is moved after // the call to the inherited operator=, then this breaks graph/test/graph.cpp // by way of iterator_adaptor. compressed_pair_1& operator=(const compressed_pair_1& x) { _first = x._first; T2::operator=(x); return *this; } #endif first_reference first() { return _first; } first_const_reference first() const { return _first; } second_reference second() { return *this; } second_const_reference second() const { return *this; } void swap(compressed_pair_1& y) { // no need to swap empty base class: using std::swap; swap(_first, y._first); } }; // T1 != T2, T1 empty template class compressed_pair_2 : T1 { private: T2 _second; public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_2() : T1(), _second() {} compressed_pair_2(first_param_type x, second_param_type y) : T1(x), _second(y) {} template explicit compressed_pair_2(const A& val) { init_one::value>::init(val, static_cast(this), &_second); } compressed_pair_2(const ::boost::compressed_pair& x) : T1(x.first()), _second(x.second()) {} #if 0 compressed_pair_2& operator=(const compressed_pair_2& x) { cout << "assigning compressed pair 2" << endl; T1::operator=(x); _second = x._second; cout << "finished assigning compressed pair 2" << endl; return *this; } #endif first_reference first() { return *this; } first_const_reference first() const { return *this; } second_reference second() { return _second; } second_const_reference second() const { return _second; } void swap(compressed_pair_2& y) { // no need to swap empty base class: using std::swap; swap(_second, y._second); } }; // T1 != T2, both empty template class compressed_pair_3 : T1, T2 { public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_3() : T1(), T2() {} compressed_pair_3(first_param_type x, second_param_type y) : T1(x), T2(y) {} template explicit compressed_pair_3(const A& val) { init_one::value>::init(val, static_cast(this), static_cast(this)); } compressed_pair_3(const ::boost::compressed_pair& x) : T1(x.first()), T2(x.second()) {} first_reference first() { return *this; } first_const_reference first() const { return *this; } second_reference second() { return *this; } second_const_reference second() const { return *this; } void swap(compressed_pair_3& y) { // no need to swap empty base classes: } }; // T1 == T2, and empty template class compressed_pair_4 : T1 { public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_4() : T1() {} compressed_pair_4(first_param_type x, second_param_type y) : T1(x), m_second(y) {} // only one single argument constructor since T1 == T2 explicit compressed_pair_4(first_param_type x) : T1(x), m_second(x) {} compressed_pair_4(const ::boost::compressed_pair& x) : T1(x.first()), m_second(x.second()) {} first_reference first() { return *this; } first_const_reference first() const { return *this; } second_reference second() { return m_second; } second_const_reference second() const { return m_second; } void swap(compressed_pair_4& y) { // no need to swap empty base classes: } private: T2 m_second; }; // T1 == T2, not empty template class compressed_pair_5 { private: T1 _first; T2 _second; public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair_5() : _first(), _second() {} compressed_pair_5(first_param_type x, second_param_type y) : _first(x), _second(y) {} // only one single argument constructor since T1 == T2 explicit compressed_pair_5(first_param_type x) : _first(x), _second(x) {} compressed_pair_5(const ::boost::compressed_pair& c) : _first(c.first()), _second(c.second()) {} first_reference first() { return _first; } first_const_reference first() const { return _first; } second_reference second() { return _second; } second_const_reference second() const { return _second; } void swap(compressed_pair_5& y) { using std::swap; swap(_first, y._first); swap(_second, y._second); } }; template struct compressed_pair_chooser { template struct rebind { typedef compressed_pair_0 type; }; }; template <> struct compressed_pair_chooser { template struct rebind { typedef compressed_pair_1 type; }; }; template <> struct compressed_pair_chooser { template struct rebind { typedef compressed_pair_2 type; }; }; template <> struct compressed_pair_chooser { template struct rebind { typedef compressed_pair_3 type; }; }; template <> struct compressed_pair_chooser { template struct rebind { typedef compressed_pair_4 type; }; }; template <> struct compressed_pair_chooser { template struct rebind { typedef compressed_pair_5 type; }; }; template struct compressed_pair_traits { private: typedef compressed_pair_chooser::value, is_empty::value, is_same::value> chooser; typedef typename chooser::template rebind bound_type; public: typedef typename bound_type::type type; }; } // namespace detail template class compressed_pair : public detail::compressed_pair_traits::type { private: typedef typename detail::compressed_pair_traits::type base_type; public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair() : base_type() {} compressed_pair(first_param_type x, second_param_type y) : base_type(x, y) {} template explicit compressed_pair(const A& x) : base_type(x){} first_reference first() { return base_type::first(); } first_const_reference first() const { return base_type::first(); } second_reference second() { return base_type::second(); } second_const_reference second() const { return base_type::second(); } }; template inline void swap(compressed_pair& x, compressed_pair& y) { x.swap(y); } #else // no partial specialisation, no member templates: template class compressed_pair { private: T1 _first; T2 _second; public: typedef T1 first_type; typedef T2 second_type; typedef typename call_traits::param_type first_param_type; typedef typename call_traits::param_type second_param_type; typedef typename call_traits::reference first_reference; typedef typename call_traits::reference second_reference; typedef typename call_traits::const_reference first_const_reference; typedef typename call_traits::const_reference second_const_reference; compressed_pair() : _first(), _second() {} compressed_pair(first_param_type x, second_param_type y) : _first(x), _second(y) {} explicit compressed_pair(first_param_type x) : _first(x), _second() {} // can't define this in case T1 == T2: // explicit compressed_pair(second_param_type y) : _first(), _second(y) {} first_reference first() { return _first; } first_const_reference first() const { return _first; } second_reference second() { return _second; } second_const_reference second() const { return _second; } void swap(compressed_pair& y) { using std::swap; swap(_first, y._first); swap(_second, y._second); } }; template inline void swap(compressed_pair& x, compressed_pair& y) { x.swap(y); } #endif } // boost #endif // BOOST_OB_COMPRESSED_PAIR_HPP quick_allocator.hpp000444000765000024 116512161110665 23420 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail#ifndef BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED #define BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif // // detail/quick_allocator.hpp // // Copyright (c) 2003 David Abrahams // Copyright (c) 2003 Peter Dimov // // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt // #include #endif // #ifndef BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED reference_content.hpp000444000765000024 613312161110666 23735 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail//----------------------------------------------------------------------------- // 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 select_type.hpp000444000765000024 221612161110662 22557 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// (C) Copyright David Abrahams 2001. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org for most recent version including documentation. // Revision History // 09 Feb 01 Applied John Maddock's Borland patch Moving // specialization to unspecialized template (David Abrahams) // 06 Feb 01 Created (David Abrahams) #ifndef SELECT_TYPE_DWA20010206_HPP # define SELECT_TYPE_DWA20010206_HPP namespace boost { namespace detail { // Template class if_true -- select among 2 types based on a bool constant expression // Usage: // typename if_true<(bool_const_expression)>::template then::type // HP aCC cannot deal with missing names for template value parameters template struct if_true { template struct then { typedef T type; }; }; template <> struct if_true { template struct then { typedef F type; }; }; }} #endif // SELECT_TYPE_DWA20010206_HPP sp_typeinfo.hpp000444000765000024 477612161110603 22606 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail#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 templated_streams.hpp000444000765000024 441412161110654 23757 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail//----------------------------------------------------------------------------- // boost detail/templated_streams.hpp header file // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // // Copyright (c) 2003 // Eric Friedman // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_DETAIL_TEMPLATED_STREAMS_HPP #define BOOST_DETAIL_TEMPLATED_STREAMS_HPP #include "boost/config.hpp" /////////////////////////////////////////////////////////////////////////////// // (detail) BOOST_TEMPLATED_STREAM_* macros // // Provides workaround platforms without stream class templates. // #if !defined(BOOST_NO_STD_LOCALE) #define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) \ template < typename E , typename T > #define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) \ template < typename E , typename T , typename A > #define BOOST_TEMPLATED_STREAM_ARGS(E,T) \ typename E , typename T #define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) \ typename E , typename T , typename A #define BOOST_TEMPLATED_STREAM_COMMA , #define BOOST_TEMPLATED_STREAM_ELEM(E) E #define BOOST_TEMPLATED_STREAM_TRAITS(T) T #define BOOST_TEMPLATED_STREAM_ALLOC(A) A #define BOOST_TEMPLATED_STREAM(X,E,T) \ BOOST_JOIN(std::basic_,X)< E , T > #define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \ BOOST_JOIN(std::basic_,X)< E , T , A > #else // defined(BOOST_NO_STD_LOCALE) #define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) /**/ #define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) /**/ #define BOOST_TEMPLATED_STREAM_ARGS(E,T) /**/ #define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) /**/ #define BOOST_TEMPLATED_STREAM_COMMA /**/ #define BOOST_TEMPLATED_STREAM_ELEM(E) char #define BOOST_TEMPLATED_STREAM_TRAITS(T) std::char_traits #define BOOST_TEMPLATED_STREAM_ALLOC(A) std::allocator #define BOOST_TEMPLATED_STREAM(X,E,T) \ std::X #define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \ std::X #endif // BOOST_NO_STD_LOCALE #endif // BOOST_DETAIL_TEMPLATED_STREAMS_HPP utf8_codecvt_facet.hpp000444000765000024 1564512161110643 24027 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// 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 utf8_codecvt_facet.ipp000444000765000024 2300512161110611 24010 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // utf8_codecvt_facet.ipp // 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 workaround.hpp000444000765000024 1660012161110635 22454 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/detail// 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 dynamic_bitset000755000765000024 012161110700 21115 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostconfig.hpp000444000765000024 455312161110700 23237 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/dynamic_bitset// ----------------------------------------------------------- // // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek // Copyright (c) 2003-2006, 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_DYNAMIC_BITSET_CONFIG_HPP_GP_20040424 #define BOOST_DYNAMIC_BITSET_CONFIG_HPP_GP_20040424 #include "boost/config.hpp" #include "boost/detail/workaround.hpp" // support for pre 3.0 libstdc++ - thanks Phil Edwards! #if defined (__STL_CONFIG_H) && !defined (__STL_USE_NEW_IOSTREAMS) # define BOOST_OLD_IOSTREAMS #endif // no-op function to workaround gcc bug c++/8419 // namespace boost { namespace detail { template T make_non_const(T t) { return t; } }} #if defined(__GNUC__) # define BOOST_DYNAMIC_BITSET_WRAP_CONSTANT(expr) \ (boost::detail::make_non_const(expr)) #else # define BOOST_DYNAMIC_BITSET_WRAP_CONSTANT(expr) (expr) #endif // #if (defined __BORLANDC__ && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))) \ || (defined BOOST_NO_MEMBER_TEMPLATE_FRIENDS) #define BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS #endif // if we can't use friends then we simply expose private members // #if defined(BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS) #define BOOST_DYNAMIC_BITSET_PRIVATE public #else #define BOOST_DYNAMIC_BITSET_PRIVATE private #endif // A couple of macros to cope with libraries without locale // support. The first macro must be used to declare a reference // to a ctype facet. The second one to widen a char by using // that ctype object. If facets and locales aren't available // the first macro is a no-op and the second one just expands // to its parameter c. // #if defined (BOOST_USE_FACET) #define BOOST_DYNAMIC_BITSET_CTYPE_FACET(ch, name, loc) \ const std::ctype & name = \ BOOST_USE_FACET(std::ctype, loc) /**/ #define BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, c) \ (fac.widen(c)) #else #define BOOST_DYNAMIC_BITSET_CTYPE_FACET(ch, name, loc) /**/ #define BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, c) c #endif #endif // include guard dynamic_bitset.hpp000444000765000024 15235712161110637 25047 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/dynamic_bitset// ----------------------------------------------------------- // // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek // Copyright (c) 2003-2006, 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_DYNAMIC_BITSET_DYNAMIC_BITSET_HPP #define BOOST_DYNAMIC_BITSET_DYNAMIC_BITSET_HPP #include #include #include #include #include #include // for CHAR_BIT #include "boost/dynamic_bitset/config.hpp" #ifndef BOOST_NO_STD_LOCALE # include #endif #if defined(BOOST_OLD_IOSTREAMS) # include # include // for isspace #else # include # include #endif #include "boost/dynamic_bitset_fwd.hpp" #include "boost/detail/dynamic_bitset.hpp" #include "boost/detail/iterator.hpp" // used to implement append(Iter, Iter) #include "boost/static_assert.hpp" #include "boost/limits.hpp" #include "boost/pending/lowest_bit.hpp" namespace boost { template class dynamic_bitset { // Portability note: member function templates are defined inside // this class definition to avoid problems with VC++. Similarly, // with the member functions of nested classes. // // [October 2008: the note above is mostly historical; new versions // of VC++ are likely able to digest a more drinking form of the // code; but changing it now is probably not worth the risks...] BOOST_STATIC_ASSERT((bool)detail::dynamic_bitset_impl::allowed_block_type::value); public: typedef Block block_type; typedef Allocator allocator_type; typedef std::size_t size_type; typedef block_type block_width_type; BOOST_STATIC_CONSTANT(block_width_type, bits_per_block = (std::numeric_limits::digits)); BOOST_STATIC_CONSTANT(size_type, npos = static_cast(-1)); public: // A proxy class to simulate lvalues of bit type. // class reference { friend class dynamic_bitset; // the one and only non-copy ctor reference(block_type & b, block_type pos) :m_block(b), m_mask( (assert(pos < bits_per_block), block_type(1) << pos ) ) { } void operator&(); // left undefined public: // copy constructor: compiler generated operator bool() const { return (m_block & m_mask) != 0; } bool operator~() const { return (m_block & m_mask) == 0; } reference& flip() { do_flip(); return *this; } reference& operator=(bool x) { do_assign(x); return *this; } // for b[i] = x reference& operator=(const reference& rhs) { do_assign(rhs); return *this; } // for b[i] = b[j] reference& operator|=(bool x) { if (x) do_set(); return *this; } reference& operator&=(bool x) { if (!x) do_reset(); return *this; } reference& operator^=(bool x) { if (x) do_flip(); return *this; } reference& operator-=(bool x) { if (x) do_reset(); return *this; } private: block_type & m_block; const block_type m_mask; void do_set() { m_block |= m_mask; } void do_reset() { m_block &= ~m_mask; } void do_flip() { m_block ^= m_mask; } void do_assign(bool x) { x? do_set() : do_reset(); } }; typedef bool const_reference; // constructors, etc. explicit dynamic_bitset(const Allocator& alloc = Allocator()); explicit dynamic_bitset(size_type num_bits, unsigned long value = 0, const Allocator& alloc = Allocator()); // WARNING: you should avoid using this constructor. // // A conversion from string is, in most cases, formatting, // and should be performed by using operator>>. // // NOTE: // Leave the parentheses around std::basic_string::npos. // g++ 3.2 requires them and probably the standard will - see core issue 325 // NOTE 2: // split into two constructors because of bugs in MSVC 6.0sp5 with STLport template dynamic_bitset(const std::basic_string& s, typename std::basic_string::size_type pos, typename std::basic_string::size_type n, size_type num_bits = npos, const Allocator& alloc = Allocator()) :m_bits(alloc), m_num_bits(0) { init_from_string(s, pos, n, num_bits); } template explicit dynamic_bitset(const std::basic_string& s, typename std::basic_string::size_type pos = 0) :m_bits(Allocator()), m_num_bits(0) { init_from_string(s, pos, (std::basic_string::npos), npos); } // The first bit in *first is the least significant bit, and the // last bit in the block just before *last is the most significant bit. template dynamic_bitset(BlockInputIterator first, BlockInputIterator last, const Allocator& alloc = Allocator()) :m_bits(alloc), m_num_bits(0) { using boost::detail::dynamic_bitset_impl::value_to_type; using boost::detail::dynamic_bitset_impl::is_numeric; const value_to_type< is_numeric::value> selector; dispatch_init(first, last, selector); } template void dispatch_init(T num_bits, unsigned long value, detail::dynamic_bitset_impl::value_to_type) { init_from_unsigned_long(static_cast(num_bits), value); } template void dispatch_init(T first, T last, detail::dynamic_bitset_impl::value_to_type) { init_from_block_range(first, last); } template void init_from_block_range(BlockIter first, BlockIter last) { assert(m_bits.size() == 0); m_bits.insert(m_bits.end(), first, last); m_num_bits = m_bits.size() * bits_per_block; } // copy constructor dynamic_bitset(const dynamic_bitset& b); ~dynamic_bitset(); void swap(dynamic_bitset& b); dynamic_bitset& operator=(const dynamic_bitset& b); allocator_type get_allocator() const; // size changing operations void resize(size_type num_bits, bool value = false); void clear(); void push_back(bool bit); void append(Block block); template void m_append(BlockInputIterator first, BlockInputIterator last, std::input_iterator_tag) { std::vector v(first, last); m_append(v.begin(), v.end(), std::random_access_iterator_tag()); } template void m_append(BlockInputIterator first, BlockInputIterator last, std::forward_iterator_tag) { assert(first != last); block_width_type r = count_extra_bits(); std::size_t d = boost::detail::distance(first, last); m_bits.reserve(num_blocks() + d); if (r == 0) { for( ; first != last; ++first) m_bits.push_back(*first); // could use vector<>::insert() } else { m_highest_block() |= (*first << r); do { Block b = *first >> (bits_per_block - r); ++first; m_bits.push_back(b | (first==last? 0 : *first << r)); } while (first != last); } m_num_bits += bits_per_block * d; } template void append(BlockInputIterator first, BlockInputIterator last) // strong guarantee { if (first != last) { typename detail::iterator_traits::iterator_category cat; m_append(first, last, cat); } } // bitset operations dynamic_bitset& operator&=(const dynamic_bitset& b); dynamic_bitset& operator|=(const dynamic_bitset& b); dynamic_bitset& operator^=(const dynamic_bitset& b); dynamic_bitset& operator-=(const dynamic_bitset& b); dynamic_bitset& operator<<=(size_type n); dynamic_bitset& operator>>=(size_type n); dynamic_bitset operator<<(size_type n) const; dynamic_bitset operator>>(size_type n) const; // basic bit operations dynamic_bitset& set(size_type n, bool val = true); dynamic_bitset& set(); dynamic_bitset& reset(size_type n); dynamic_bitset& reset(); dynamic_bitset& flip(size_type n); dynamic_bitset& flip(); bool test(size_type n) const; bool any() const; bool none() const; dynamic_bitset operator~() const; size_type count() const; // subscript reference operator[](size_type pos) { return reference(m_bits[block_index(pos)], bit_index(pos)); } bool operator[](size_type pos) const { return test(pos); } unsigned long to_ulong() const; size_type size() const; size_type num_blocks() const; size_type max_size() const; bool empty() const; bool is_subset_of(const dynamic_bitset& a) const; bool is_proper_subset_of(const dynamic_bitset& a) const; bool intersects(const dynamic_bitset & a) const; // lookup size_type find_first() const; size_type find_next(size_type pos) const; #if !defined BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS // lexicographical comparison template friend bool operator==(const dynamic_bitset& a, const dynamic_bitset& b); template friend bool operator<(const dynamic_bitset& a, const dynamic_bitset& b); template friend void to_block_range(const dynamic_bitset& b, BlockOutputIterator result); template friend void from_block_range(BlockIterator first, BlockIterator last, dynamic_bitset& result); template friend std::basic_istream& operator>>(std::basic_istream& is, dynamic_bitset& b); template friend void to_string_helper(const dynamic_bitset & b, stringT & s, bool dump_all); #endif private: BOOST_STATIC_CONSTANT(block_width_type, ulong_width = std::numeric_limits::digits); typedef std::vector buffer_type; void m_zero_unused_bits(); bool m_check_invariants() const; size_type m_do_find_from(size_type first_block) const; block_width_type count_extra_bits() const { return bit_index(size()); } static size_type block_index(size_type pos) { return pos / bits_per_block; } static block_width_type bit_index(size_type pos) { return static_cast(pos % bits_per_block); } static Block bit_mask(size_type pos) { return Block(1) << bit_index(pos); } template void init_from_string(const std::basic_string& s, typename std::basic_string::size_type pos, typename std::basic_string::size_type n, size_type num_bits) { assert(pos <= s.size()); typedef typename std::basic_string StrT; typedef typename StrT::traits_type Tr; const typename StrT::size_type rlen = (std::min)(n, s.size() - pos); const size_type sz = ( num_bits != npos? num_bits : rlen); m_bits.resize(calc_num_blocks(sz)); m_num_bits = sz; BOOST_DYNAMIC_BITSET_CTYPE_FACET(CharT, fac, std::locale()); const CharT one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1'); const size_type m = num_bits < rlen ? num_bits : rlen; typename StrT::size_type i = 0; for( ; i < m; ++i) { const CharT c = s[(pos + m - 1) - i]; assert( Tr::eq(c, one) || Tr::eq(c, BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0')) ); if (Tr::eq(c, one)) set(i); } } void init_from_unsigned_long(size_type num_bits, unsigned long value/*, const Allocator& alloc*/) { assert(m_bits.size() == 0); m_bits.resize(calc_num_blocks(num_bits)); m_num_bits = num_bits; typedef unsigned long num_type; typedef boost::detail::dynamic_bitset_impl ::shifter shifter; //if (num_bits == 0) // return; // zero out all bits at pos >= num_bits, if any; // note that: num_bits == 0 implies value == 0 if (num_bits < static_cast(ulong_width)) { const num_type mask = (num_type(1) << num_bits) - 1; value &= mask; } typename buffer_type::iterator it = m_bits.begin(); for( ; value; shifter::left_shift(value), ++it) { *it = static_cast(value); } } BOOST_DYNAMIC_BITSET_PRIVATE: bool m_unchecked_test(size_type pos) const; static size_type calc_num_blocks(size_type num_bits); Block& m_highest_block(); const Block& m_highest_block() const; buffer_type m_bits; size_type m_num_bits; class bit_appender; friend class bit_appender; class bit_appender { // helper for stream >> // Supplies to the lack of an efficient append at the less // significant end: bits are actually appended "at left" but // rearranged in the destructor. From the perspective of // client code everything works *as if* dynamic_bitset<> had // an append_at_right() function (eventually throwing the same // exceptions as push_back) except that the function is in fact // called bit_appender::do_append(). // dynamic_bitset & bs; size_type n; Block mask; Block * current; // not implemented bit_appender(const bit_appender &); bit_appender & operator=(const bit_appender &); public: bit_appender(dynamic_bitset & r) : bs(r), n(0), mask(0), current(0) {} ~bit_appender() { // reverse the order of blocks, shift // if needed, and then resize // std::reverse(bs.m_bits.begin(), bs.m_bits.end()); const block_width_type offs = bit_index(n); if (offs) bs >>= (bits_per_block - offs); bs.resize(n); // doesn't enlarge, so can't throw assert(bs.m_check_invariants()); } inline void do_append(bool value) { if (mask == 0) { bs.append(Block(0)); current = &bs.m_highest_block(); mask = Block(1) << (bits_per_block - 1); } if(value) *current |= mask; mask /= 2; ++n; } size_type get_count() const { return n; } }; }; #if !defined BOOST_NO_INCLASS_MEMBER_INITIALIZATION template const typename dynamic_bitset::block_width_type dynamic_bitset::bits_per_block; template const typename dynamic_bitset::size_type dynamic_bitset::npos; template const typename dynamic_bitset::block_width_type dynamic_bitset::ulong_width; #endif // Global Functions: // comparison template bool operator!=(const dynamic_bitset& a, const dynamic_bitset& b); template bool operator<=(const dynamic_bitset& a, const dynamic_bitset& b); template bool operator>(const dynamic_bitset& a, const dynamic_bitset& b); template bool operator>=(const dynamic_bitset& a, const dynamic_bitset& b); // stream operators #ifdef BOOST_OLD_IOSTREAMS template std::ostream& operator<<(std::ostream& os, const dynamic_bitset& b); template std::istream& operator>>(std::istream& is, dynamic_bitset& b); #else template std::basic_ostream& operator<<(std::basic_ostream& os, const dynamic_bitset& b); template std::basic_istream& operator>>(std::basic_istream& is, dynamic_bitset& b); #endif // bitset operations template dynamic_bitset operator&(const dynamic_bitset& b1, const dynamic_bitset& b2); template dynamic_bitset operator|(const dynamic_bitset& b1, const dynamic_bitset& b2); template dynamic_bitset operator^(const dynamic_bitset& b1, const dynamic_bitset& b2); template dynamic_bitset operator-(const dynamic_bitset& b1, const dynamic_bitset& b2); // namespace scope swap template void swap(dynamic_bitset& b1, dynamic_bitset& b2); template void to_string(const dynamic_bitset& b, stringT & s); template void to_block_range(const dynamic_bitset& b, BlockOutputIterator result); template inline void from_block_range(BlockIterator first, BlockIterator last, dynamic_bitset& result) { // PRE: distance(first, last) <= numblocks() std::copy (first, last, result.m_bits.begin()); } //============================================================================= // dynamic_bitset implementation //----------------------------------------------------------------------------- // constructors, etc. template dynamic_bitset::dynamic_bitset(const Allocator& alloc) : m_bits(alloc), m_num_bits(0) { } template dynamic_bitset:: dynamic_bitset(size_type num_bits, unsigned long value, const Allocator& alloc) : m_bits(alloc), m_num_bits(0) { init_from_unsigned_long(num_bits, value); } // copy constructor template inline dynamic_bitset:: dynamic_bitset(const dynamic_bitset& b) : m_bits(b.m_bits), m_num_bits(b.m_num_bits) { } template inline dynamic_bitset:: ~dynamic_bitset() { assert(m_check_invariants()); } template inline void dynamic_bitset:: swap(dynamic_bitset& b) // no throw { std::swap(m_bits, b.m_bits); std::swap(m_num_bits, b.m_num_bits); } template dynamic_bitset& dynamic_bitset:: operator=(const dynamic_bitset& b) { m_bits = b.m_bits; m_num_bits = b.m_num_bits; return *this; } template inline typename dynamic_bitset::allocator_type dynamic_bitset::get_allocator() const { return m_bits.get_allocator(); } //----------------------------------------------------------------------------- // size changing operations template void dynamic_bitset:: resize(size_type num_bits, bool value) // strong guarantee { const size_type old_num_blocks = num_blocks(); const size_type required_blocks = calc_num_blocks(num_bits); const block_type v = value? ~Block(0) : Block(0); if (required_blocks != old_num_blocks) { m_bits.resize(required_blocks, v); // s.g. (copy) } // At this point: // // - if the buffer was shrunk, we have nothing more to do, // except a call to m_zero_unused_bits() // // - if it was enlarged, all the (used) bits in the new blocks have // the correct value, but we have not yet touched those bits, if // any, that were 'unused bits' before enlarging: if value == true, // they must be set. if (value && (num_bits > m_num_bits)) { const block_width_type extra_bits = count_extra_bits(); if (extra_bits) { assert(old_num_blocks >= 1 && old_num_blocks <= m_bits.size()); // Set them. m_bits[old_num_blocks - 1] |= (v << extra_bits); } } m_num_bits = num_bits; m_zero_unused_bits(); } template void dynamic_bitset:: clear() // no throw { m_bits.clear(); m_num_bits = 0; } template void dynamic_bitset:: push_back(bool bit) { const size_type sz = size(); resize(sz + 1); set(sz, bit); } template void dynamic_bitset:: append(Block value) // strong guarantee { const block_width_type r = count_extra_bits(); if (r == 0) { // the buffer is empty, or all blocks are filled m_bits.push_back(value); } else { m_bits.push_back(value >> (bits_per_block - r)); m_bits[m_bits.size() - 2] |= (value << r); // m_bits.size() >= 2 } m_num_bits += bits_per_block; assert(m_check_invariants()); } //----------------------------------------------------------------------------- // bitset operations template dynamic_bitset& dynamic_bitset::operator&=(const dynamic_bitset& rhs) { assert(size() == rhs.size()); for (size_type i = 0; i < num_blocks(); ++i) m_bits[i] &= rhs.m_bits[i]; return *this; } template dynamic_bitset& dynamic_bitset::operator|=(const dynamic_bitset& rhs) { assert(size() == rhs.size()); for (size_type i = 0; i < num_blocks(); ++i) m_bits[i] |= rhs.m_bits[i]; //m_zero_unused_bits(); return *this; } template dynamic_bitset& dynamic_bitset::operator^=(const dynamic_bitset& rhs) { assert(size() == rhs.size()); for (size_type i = 0; i < this->num_blocks(); ++i) m_bits[i] ^= rhs.m_bits[i]; //m_zero_unused_bits(); return *this; } template dynamic_bitset& dynamic_bitset::operator-=(const dynamic_bitset& rhs) { assert(size() == rhs.size()); for (size_type i = 0; i < num_blocks(); ++i) m_bits[i] &= ~rhs.m_bits[i]; //m_zero_unused_bits(); return *this; } // // NOTE: // Note that the 'if (r != 0)' is crucial to avoid undefined // behavior when the left hand operand of >> isn't promoted to a // wider type (because rs would be too large). // template dynamic_bitset& dynamic_bitset::operator<<=(size_type n) { if (n >= m_num_bits) return reset(); //else if (n > 0) { size_type const last = num_blocks() - 1; // num_blocks() is >= 1 size_type const div = n / bits_per_block; // div is <= last block_width_type const r = bit_index(n); block_type * const b = &m_bits[0]; if (r != 0) { block_width_type const rs = bits_per_block - r; for (size_type i = last-div; i>0; --i) { b[i+div] = (b[i] << r) | (b[i-1] >> rs); } b[div] = b[0] << r; } else { for (size_type i = last-div; i>0; --i) { b[i+div] = b[i]; } b[div] = b[0]; } // zero out div blocks at the less significant end std::fill_n(b, div, static_cast(0)); // zero out any 1 bit that flowed into the unused part m_zero_unused_bits(); // thanks to Lester Gong } return *this; } // // NOTE: // see the comments to operator <<= // template dynamic_bitset & dynamic_bitset::operator>>=(size_type n) { if (n >= m_num_bits) { return reset(); } //else if (n>0) { size_type const last = num_blocks() - 1; // num_blocks() is >= 1 size_type const div = n / bits_per_block; // div is <= last block_width_type const r = bit_index(n); block_type * const b = &m_bits[0]; if (r != 0) { block_width_type const ls = bits_per_block - r; for (size_type i = div; i < last; ++i) { b[i-div] = (b[i] >> r) | (b[i+1] << ls); } // r bits go to zero b[last-div] = b[last] >> r; } else { for (size_type i = div; i <= last; ++i) { b[i-div] = b[i]; } // note the '<=': the last iteration 'absorbs' // b[last-div] = b[last] >> 0; } // div blocks are zero filled at the most significant end std::fill_n(b + (num_blocks()-div), div, static_cast(0)); } return *this; } template dynamic_bitset dynamic_bitset::operator<<(size_type n) const { dynamic_bitset r(*this); return r <<= n; } template dynamic_bitset dynamic_bitset::operator>>(size_type n) const { dynamic_bitset r(*this); return r >>= n; } //----------------------------------------------------------------------------- // basic bit operations template dynamic_bitset& dynamic_bitset::set(size_type pos, bool val) { assert(pos < m_num_bits); if (val) m_bits[block_index(pos)] |= bit_mask(pos); else reset(pos); return *this; } template dynamic_bitset& dynamic_bitset::set() { std::fill(m_bits.begin(), m_bits.end(), ~Block(0)); m_zero_unused_bits(); return *this; } template dynamic_bitset& dynamic_bitset::reset(size_type pos) { assert(pos < m_num_bits); #if defined __MWERKS__ && BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x // CodeWarrior 8 generates incorrect code when the &=~ is compiled, // use the |^ variation instead.. m_bits[block_index(pos)] |= bit_mask(pos); m_bits[block_index(pos)] ^= bit_mask(pos); #else m_bits[block_index(pos)] &= ~bit_mask(pos); #endif return *this; } template dynamic_bitset& dynamic_bitset::reset() { std::fill(m_bits.begin(), m_bits.end(), Block(0)); return *this; } template dynamic_bitset& dynamic_bitset::flip(size_type pos) { assert(pos < m_num_bits); m_bits[block_index(pos)] ^= bit_mask(pos); return *this; } template dynamic_bitset& dynamic_bitset::flip() { for (size_type i = 0; i < num_blocks(); ++i) m_bits[i] = ~m_bits[i]; m_zero_unused_bits(); return *this; } template bool dynamic_bitset::m_unchecked_test(size_type pos) const { return (m_bits[block_index(pos)] & bit_mask(pos)) != 0; } template bool dynamic_bitset::test(size_type pos) const { assert(pos < m_num_bits); return m_unchecked_test(pos); } template bool dynamic_bitset::any() const { for (size_type i = 0; i < num_blocks(); ++i) if (m_bits[i]) return true; return false; } template inline bool dynamic_bitset::none() const { return !any(); } template dynamic_bitset dynamic_bitset::operator~() const { dynamic_bitset b(*this); b.flip(); return b; } template typename dynamic_bitset::size_type dynamic_bitset::count() const { using detail::dynamic_bitset_impl::table_width; using detail::dynamic_bitset_impl::access_by_bytes; using detail::dynamic_bitset_impl::access_by_blocks; using detail::dynamic_bitset_impl::value_to_type; #if BOOST_WORKAROUND(__GNUC__, == 4) && (__GNUC_MINOR__ == 3) && (__GNUC_PATCHLEVEL__ == 3) // NOTE: Explicit qualification of "bits_per_block" // breaks compilation on gcc 4.3.3 enum { no_padding = bits_per_block == CHAR_BIT * sizeof(Block) }; #else // NOTE: Explicitly qualifying "bits_per_block" to workaround // regressions of gcc 3.4.x enum { no_padding = dynamic_bitset::bits_per_block == CHAR_BIT * sizeof(Block) }; #endif enum { enough_table_width = table_width >= CHAR_BIT }; enum { mode = (no_padding && enough_table_width) ? access_by_bytes : access_by_blocks }; return do_count(m_bits.begin(), num_blocks(), Block(0), static_cast *>(0)); } //----------------------------------------------------------------------------- // conversions template void to_string_helper(const dynamic_bitset & b, stringT & s, bool dump_all) { typedef typename stringT::traits_type Tr; typedef typename stringT::value_type Ch; BOOST_DYNAMIC_BITSET_CTYPE_FACET(Ch, fac, std::locale()); const Ch zero = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0'); const Ch one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1'); // Note that this function may access (when // dump_all == true) bits beyond position size() - 1 typedef typename dynamic_bitset::size_type size_type; const size_type len = dump_all? dynamic_bitset::bits_per_block * b.num_blocks(): b.size(); s.assign (len, zero); for (size_type i = 0; i < len; ++i) { if (b.m_unchecked_test(i)) Tr::assign(s[len - 1 - i], one); } } // A comment similar to the one about the constructor from // basic_string can be done here. Thanks to James Kanze for // making me (Gennaro) realize this important separation of // concerns issue, as well as many things about i18n. // template inline void to_string(const dynamic_bitset& b, stringT& s) { to_string_helper(b, s, false); } // Differently from to_string this function dumps out // every bit of the internal representation (may be // useful for debugging purposes) // template inline void dump_to_string(const dynamic_bitset& b, stringT& s) { to_string_helper(b, s, true /* =dump_all*/); } template inline void to_block_range(const dynamic_bitset& b, BlockOutputIterator result) { // note how this copies *all* bits, including the // unused ones in the last block (which are zero) std::copy(b.m_bits.begin(), b.m_bits.end(), result); } template unsigned long dynamic_bitset:: to_ulong() const { if (m_num_bits == 0) return 0; // convention // Check for overflows. This may be a performance burden on very // large bitsets but is required by the specification, sorry if (find_next(ulong_width - 1) != npos) throw std::overflow_error("boost::dynamic_bitset::to_ulong overflow"); // Ok, from now on we can be sure there's no "on" bit // beyond the "allowed" positions typedef unsigned long result_type; const size_type maximum_size = (std::min)(m_num_bits, static_cast(ulong_width)); const size_type last_block = block_index( maximum_size - 1 ); assert((last_block * bits_per_block) < static_cast(ulong_width)); result_type result = 0; for (size_type i = 0; i <= last_block; ++i) { const size_type offset = i * bits_per_block; result |= (static_cast(m_bits[i]) << offset); } return result; } template inline typename dynamic_bitset::size_type dynamic_bitset::size() const { return m_num_bits; } template inline typename dynamic_bitset::size_type dynamic_bitset::num_blocks() const { return m_bits.size(); } template inline typename dynamic_bitset::size_type dynamic_bitset::max_size() const { // Semantics of vector<>::max_size() aren't very clear // (see lib issue 197) and many library implementations // simply return dummy values, _unrelated_ to the underlying // allocator. // // Given these problems, I was tempted to not provide this // function at all but the user could need it if he provides // his own allocator. // const size_type m = detail::dynamic_bitset_impl:: vector_max_size_workaround(m_bits); return m <= (size_type(-1)/bits_per_block) ? m * bits_per_block : size_type(-1); } template inline bool dynamic_bitset::empty() const { return size() == 0; } template bool dynamic_bitset:: is_subset_of(const dynamic_bitset& a) const { assert(size() == a.size()); for (size_type i = 0; i < num_blocks(); ++i) if (m_bits[i] & ~a.m_bits[i]) return false; return true; } template bool dynamic_bitset:: is_proper_subset_of(const dynamic_bitset& a) const { assert(size() == a.size()); assert(num_blocks() == a.num_blocks()); bool proper = false; for (size_type i = 0; i < num_blocks(); ++i) { const Block & bt = m_bits[i]; const Block & ba = a.m_bits[i]; if (bt & ~ba) return false; // not a subset at all if (ba & ~bt) proper = true; } return proper; } template bool dynamic_bitset::intersects(const dynamic_bitset & b) const { size_type common_blocks = num_blocks() < b.num_blocks() ? num_blocks() : b.num_blocks(); for(size_type i = 0; i < common_blocks; ++i) { if(m_bits[i] & b.m_bits[i]) return true; } return false; } // -------------------------------- // lookup // look for the first bit "on", starting // from the block with index first_block // template typename dynamic_bitset::size_type dynamic_bitset::m_do_find_from(size_type first_block) const { size_type i = first_block; // skip null blocks while (i < num_blocks() && m_bits[i] == 0) ++i; if (i >= num_blocks()) return npos; // not found return i * bits_per_block + boost::lowest_bit(m_bits[i]); } template typename dynamic_bitset::size_type dynamic_bitset::find_first() const { return m_do_find_from(0); } template typename dynamic_bitset::size_type dynamic_bitset::find_next(size_type pos) const { const size_type sz = size(); if (pos >= (sz-1) || sz == 0) return npos; ++pos; const size_type blk = block_index(pos); const block_width_type ind = bit_index(pos); // mask out bits before pos const Block fore = m_bits[blk] & ( ~Block(0) << ind ); return fore? blk * bits_per_block + lowest_bit(fore) : m_do_find_from(blk + 1); } //----------------------------------------------------------------------------- // comparison template bool operator==(const dynamic_bitset& a, const dynamic_bitset& b) { return (a.m_num_bits == b.m_num_bits) && (a.m_bits == b.m_bits); } template inline bool operator!=(const dynamic_bitset& a, const dynamic_bitset& b) { return !(a == b); } template bool operator<(const dynamic_bitset& a, const dynamic_bitset& b) { assert(a.size() == b.size()); typedef typename dynamic_bitset::size_type size_type; //if (a.size() == 0) // return false; // Since we are storing the most significant bit // at pos == size() - 1, we need to do the comparisons in reverse. // for (size_type ii = a.num_blocks(); ii > 0; --ii) { size_type i = ii-1; if (a.m_bits[i] < b.m_bits[i]) return true; else if (a.m_bits[i] > b.m_bits[i]) return false; } return false; } template inline bool operator<=(const dynamic_bitset& a, const dynamic_bitset& b) { return !(a > b); } template inline bool operator>(const dynamic_bitset& a, const dynamic_bitset& b) { return b < a; } template inline bool operator>=(const dynamic_bitset& a, const dynamic_bitset& b) { return !(a < b); } //----------------------------------------------------------------------------- // stream operations #ifdef BOOST_OLD_IOSTREAMS template < typename Block, typename Alloc> std::ostream& operator<<(std::ostream& os, const dynamic_bitset& b) { // NOTE: since this is aimed at "classic" iostreams, exception // masks on the stream are not supported. The library that // ships with gcc 2.95 has an exceptions() member function but // nothing is actually implemented; not even the class ios::failure. using namespace std; const ios::iostate ok = ios::goodbit; ios::iostate err = ok; if (os.opfx()) { //try typedef typename dynamic_bitset::size_type bitsetsize_type; const bitsetsize_type sz = b.size(); std::streambuf * buf = os.rdbuf(); size_t npad = os.width() <= 0 // careful: os.width() is signed (and can be < 0) || (bitsetsize_type) os.width() <= sz? 0 : os.width() - sz; const char fill_char = os.fill(); const ios::fmtflags adjustfield = os.flags() & ios::adjustfield; // if needed fill at left; pad is decresed along the way if (adjustfield != ios::left) { for (; 0 < npad; --npad) if (fill_char != buf->sputc(fill_char)) { err |= ios::failbit; break; } } if (err == ok) { // output the bitset for (bitsetsize_type i = b.size(); 0 < i; --i) { const char dig = b.test(i-1)? '1' : '0'; if (EOF == buf->sputc(dig)) { err |= ios::failbit; break; } } } if (err == ok) { // if needed fill at right for (; 0 < npad; --npad) { if (fill_char != buf->sputc(fill_char)) { err |= ios::failbit; break; } } } os.osfx(); os.width(0); } // if opfx if(err != ok) os.setstate(err); // assume this does NOT throw return os; } #else template std::basic_ostream& operator<<(std::basic_ostream& os, const dynamic_bitset& b) { using namespace std; const ios_base::iostate ok = ios_base::goodbit; ios_base::iostate err = ok; typename basic_ostream::sentry cerberos(os); if (cerberos) { BOOST_DYNAMIC_BITSET_CTYPE_FACET(Ch, fac, os.getloc()); const Ch zero = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0'); const Ch one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1'); try { typedef typename dynamic_bitset::size_type bitsetsize_type; typedef basic_streambuf buffer_type; buffer_type * buf = os.rdbuf(); size_t npad = os.width() <= 0 // careful: os.width() is signed (and can be < 0) || (bitsetsize_type) os.width() <= b.size()? 0 : os.width() - b.size(); const Ch fill_char = os.fill(); const ios_base::fmtflags adjustfield = os.flags() & ios_base::adjustfield; // if needed fill at left; pad is decresed along the way if (adjustfield != ios_base::left) { for (; 0 < npad; --npad) if (Tr::eq_int_type(Tr::eof(), buf->sputc(fill_char))) { err |= ios_base::failbit; break; } } if (err == ok) { // output the bitset for (bitsetsize_type i = b.size(); 0 < i; --i) { typename buffer_type::int_type ret = buf->sputc(b.test(i-1)? one : zero); if (Tr::eq_int_type(Tr::eof(), ret)) { err |= ios_base::failbit; break; } } } if (err == ok) { // if needed fill at right for (; 0 < npad; --npad) { if (Tr::eq_int_type(Tr::eof(), buf->sputc(fill_char))) { err |= ios_base::failbit; break; } } } os.width(0); } catch (...) { // see std 27.6.1.1/4 bool rethrow = false; try { os.setstate(ios_base::failbit); } catch (...) { rethrow = true; } if (rethrow) throw; } } if(err != ok) os.setstate(err); // may throw exception return os; } #endif #ifdef BOOST_OLD_IOSTREAMS // A sentry-like class that calls isfx in its destructor. // "Necessary" because bit_appender::do_append may throw. class pseudo_sentry { std::istream & m_r; const bool m_ok; public: explicit pseudo_sentry(std::istream & r) : m_r(r), m_ok(r.ipfx(0)) { } ~pseudo_sentry() { m_r.isfx(); } operator bool() const { return m_ok; } }; template std::istream& operator>>(std::istream& is, dynamic_bitset& b) { // Extractor for classic IO streams (libstdc++ < 3.0) // ----------------------------------------------------// // It's assumed that the stream buffer functions, and // the stream's setstate() _cannot_ throw. typedef dynamic_bitset bitset_type; typedef typename bitset_type::size_type size_type; std::ios::iostate err = std::ios::goodbit; pseudo_sentry cerberos(is); // skips whitespaces if(cerberos) { b.clear(); const std::streamsize w = is.width(); const size_type limit = w > 0 && static_cast(w) < b.max_size() ? w : b.max_size(); typename bitset_type::bit_appender appender(b); std::streambuf * buf = is.rdbuf(); for(int c = buf->sgetc(); appender.get_count() < limit; c = buf->snextc() ) { if (c == EOF) { err |= std::ios::eofbit; break; } else if (char(c) != '0' && char(c) != '1') break; // non digit character else { try { appender.do_append(char(c) == '1'); } catch(...) { is.setstate(std::ios::failbit); // assume this can't throw throw; } } } // for } is.width(0); if (b.size() == 0) err |= std::ios::failbit; if (err != std::ios::goodbit) is.setstate (err); // may throw return is; } #else // BOOST_OLD_IOSTREAMS template std::basic_istream& operator>>(std::basic_istream& is, dynamic_bitset& b) { using namespace std; typedef dynamic_bitset bitset_type; typedef typename bitset_type::size_type size_type; const streamsize w = is.width(); const size_type limit = 0 < w && static_cast(w) < b.max_size()? w : b.max_size(); ios_base::iostate err = ios_base::goodbit; typename basic_istream::sentry cerberos(is); // skips whitespaces if(cerberos) { // in accordance with prop. resol. of lib DR 303 [last checked 4 Feb 2004] BOOST_DYNAMIC_BITSET_CTYPE_FACET(Ch, fac, is.getloc()); const Ch zero = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0'); const Ch one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1'); b.clear(); try { typename bitset_type::bit_appender appender(b); basic_streambuf * buf = is.rdbuf(); typename Tr::int_type c = buf->sgetc(); for( ; appender.get_count() < limit; c = buf->snextc() ) { if (Tr::eq_int_type(Tr::eof(), c)) { err |= ios_base::eofbit; break; } else { const Ch to_c = Tr::to_char_type(c); const bool is_one = Tr::eq(to_c, one); if (!is_one && !Tr::eq(to_c, zero)) break; // non digit character appender.do_append(is_one); } } // for } catch (...) { // catches from stream buf, or from vector: // // bits_stored bits have been extracted and stored, and // either no further character is extractable or we can't // append to the underlying vector (out of memory) bool rethrow = false; // see std 27.6.1.1/4 try { is.setstate(ios_base::badbit); } catch(...) { rethrow = true; } if (rethrow) throw; } } is.width(0); if (b.size() == 0 /*|| !cerberos*/) err |= ios_base::failbit; if (err != ios_base::goodbit) is.setstate (err); // may throw return is; } #endif //----------------------------------------------------------------------------- // bitset operations template dynamic_bitset operator&(const dynamic_bitset& x, const dynamic_bitset& y) { dynamic_bitset b(x); return b &= y; } template dynamic_bitset operator|(const dynamic_bitset& x, const dynamic_bitset& y) { dynamic_bitset b(x); return b |= y; } template dynamic_bitset operator^(const dynamic_bitset& x, const dynamic_bitset& y) { dynamic_bitset b(x); return b ^= y; } template dynamic_bitset operator-(const dynamic_bitset& x, const dynamic_bitset& y) { dynamic_bitset b(x); return b -= y; } //----------------------------------------------------------------------------- // namespace scope swap template inline void swap(dynamic_bitset& left, dynamic_bitset& right) // no throw { left.swap(right); } //----------------------------------------------------------------------------- // private (on conforming compilers) member functions template inline typename dynamic_bitset::size_type dynamic_bitset::calc_num_blocks(size_type num_bits) { return num_bits / bits_per_block + static_cast( num_bits % bits_per_block != 0 ); } // gives a reference to the highest block // template inline Block& dynamic_bitset::m_highest_block() { return const_cast (static_cast(this)->m_highest_block()); } // gives a const-reference to the highest block // template inline const Block& dynamic_bitset::m_highest_block() const { assert(size() > 0 && num_blocks() > 0); return m_bits.back(); } // If size() is not a multiple of bits_per_block // then not all the bits in the last block are used. // This function resets the unused bits (convenient // for the implementation of many member functions) // template inline void dynamic_bitset::m_zero_unused_bits() { assert (num_blocks() == calc_num_blocks(m_num_bits)); // if != 0 this is the number of bits used in the last block const block_width_type extra_bits = count_extra_bits(); if (extra_bits != 0) m_highest_block() &= ~(~static_cast(0) << extra_bits); } // check class invariants template bool dynamic_bitset::m_check_invariants() const { const block_width_type extra_bits = count_extra_bits(); if (extra_bits > 0) { block_type const mask = (~static_cast(0) << extra_bits); if ((m_highest_block() & mask) != 0) return false; } if (m_bits.size() > m_bits.capacity() || num_blocks() != calc_num_blocks(size())) return false; return true; } } // namespace boost #undef BOOST_BITSET_CHAR #endif // include guard exception000755000765000024 012161110664 20126 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostcurrent_exception_cast.hpp000444000765000024 174412161110664 25554 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/exception//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 exception.hpp000444000765000024 3046612161110607 23020 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/exception//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 { #if defined(__GNUC__) # if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) # pragma GCC visibility push (default) # endif #endif template struct error_info_injector: public T, public exception { explicit error_info_injector( T const & x ): T(x) { } ~error_info_injector() throw() { } }; #if defined(__GNUC__) # if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) # pragma GCC visibility pop # endif #endif 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 { #if defined(__GNUC__) # if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) # pragma GCC visibility push (default) # endif #endif class clone_base { public: virtual clone_base const * clone() const = 0; virtual void rethrow() const = 0; virtual ~clone_base() throw() { } }; #if defined(__GNUC__) # if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) # pragma GCC visibility pop # endif #endif 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 virtual clone_base { struct clone_tag { }; clone_impl( clone_impl const & x, clone_tag ): T(x) { copy_boost_exception(this,&x); } 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,clone_tag()); } 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 get_error_info.hpp000444000765000024 723512161110613 24000 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/exception//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 detail000755000765000024 012161110677 21374 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/exceptionattribute_noreturn.hpp000444000765000024 103712161110614 26171 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/exception/detail//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 error_info_impl.hpp000444000765000024 326312161110677 25433 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/exception/detail//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: virtual ~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 type_info.hpp000444000765000024 406212161110631 24226 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/exception/detail//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 format000755000765000024 012161110675 17422 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostalt_sstream.hpp000444000765000024 1667612161110601 22633 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 alt_sstream_impl.hpp000444000765000024 3273712161110640 23653 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 exceptions.hpp000444000765000024 672612161110646 22462 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 feed_args.hpp000444000765000024 2715512161110675 22241 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 format_class.hpp000444000765000024 1616112161110612 22761 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 format_fwd.hpp000444000765000024 336012161110660 22414 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 format_implementation.hpp000444000765000024 2764412161110656 24721 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 free_funcs.hpp000444000765000024 521212161110631 22377 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 internals.hpp000444000765000024 2012112161110644 22277 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 internals_fwd.hpp000444000765000024 410612161110622 23120 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 parsing.hpp000444000765000024 4575712161110611 21763 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format// ---------------------------------------------------------------------------- // 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 detail000755000765000024 012161110676 20665 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/formatcompat_workarounds.hpp000444000765000024 620212161110620 25441 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format/detail// ---------------------------------------------------------------------------- // 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 config_macros.hpp000444000765000024 644412161110612 24342 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format/detail// -*- 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 msvc_disambiguater.hpp000444000765000024 340612161110655 25403 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format/detail// ---------------------------------------------------------------------------- // 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 unset_macros.hpp000444000765000024 217112161110627 24232 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format/detail// ---------------------------------------------------------------------------- // 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 workarounds_gcc-2_95.hpp000444000765000024 1167012161110676 25426 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format/detail// ---------------------------------------------------------------------------- // 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 workarounds_stlport.hpp000444000765000024 317412161110642 25676 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/format/detail// ---------------------------------------------------------------------------- // 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 function000755000765000024 012161110662 17753 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostfunction0.hpp000444000765000024 66512161110614 22512 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function1.hpp000444000765000024 66512161110601 22507 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function10.hpp000444000765000024 66612161110643 22576 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function2.hpp000444000765000024 66512161110662 22517 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function3.hpp000444000765000024 66512161110653 22520 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function4.hpp000444000765000024 66512161110646 22523 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function5.hpp000444000765000024 66512161110601 22513 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function6.hpp000444000765000024 66512161110636 22524 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function7.hpp000444000765000024 66512161110655 22526 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function8.hpp000444000765000024 66512161110631 22521 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function9.hpp000444000765000024 66512161110607 22525 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function_base.hpp000444000765000024 10036112161110645 23502 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function_fwd.hpp000444000765000024 526312161110654 23315 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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 function_template.hpp000444000765000024 11713412161110644 24410 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function// 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); } #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_FUNCTION_FUNCTION(BOOST_FUNCTION_FUNCTION&& f) : function_base() { this->move_assign(f); } #endif ~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; } #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES // Move assignment from another BOOST_FUNCTION_FUNCTION BOOST_FUNCTION_FUNCTION& operator=(BOOST_FUNCTION_FUNCTION&& f) { if (&f == this) return *this; this->clear(); BOOST_TRY { this->move_assign(f); } BOOST_CATCH (...) { vtable = 0; BOOST_RETHROW; } BOOST_CATCH_END return *this; } #endif 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)){} #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES // Move constructors function(self_type&& f): base_type(static_cast(f)){} function(base_type&& f): base_type(static_cast(f)){} #endif self_type& operator=(const self_type& f) { self_type(f).swap(*this); return *this; } #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES self_type& operator=(self_type&& f) { self_type(static_cast(f)).swap(*this); return *this; } #endif 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; } #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES self_type& operator=(base_type&& f) { self_type(static_cast(f)).swap(*this); return *this; } #endif }; #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 detail000755000765000024 012161110700 21206 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functionfunction_iterate.hpp000444000765000024 104612161110654 25427 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function/detail// 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 gen_maybe_include.pl000444000765000024 246612161110700 25341 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function/detail#!/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"; maybe_include.hpp000444000765000024 2053312161110640 24702 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function/detail// 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 prologue.hpp000444000765000024 177312161110663 23730 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function/detail// 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 function_types000755000765000024 012161110660 21175 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostcomponents.hpp000444000765000024 3467012161110621 24257 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_COMPONENTS_HPP_INCLUDED #define BOOST_FT_COMPONENTS_HPP_INCLUDED #include #include #include #include #include #include #include #include #include #if BOOST_WORKAROUND(__BORLANDC__, <= 0x565) # include # include # include # include # include # include # include # include # include # include # include # include # include #endif #ifndef BOOST_FT_NO_CV_FUNC_SUPPORT # include #endif #include #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION # if BOOST_FT_MAX_ARITY < 10 # include # elif BOOST_FT_MAX_ARITY < 20 # include # elif BOOST_FT_MAX_ARITY < 30 # include # elif BOOST_FT_MAX_ARITY < 40 # include # elif BOOST_FT_MAX_ARITY < 50 # include # endif #else # include #endif #include #include // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - namespace boost { namespace function_types { using mpl::placeholders::_; template< typename T, typename ClassTypeTransform = add_reference<_> > struct components; namespace detail { template struct components_impl; #if BOOST_WORKAROUND(__BORLANDC__, <= 0x565) template struct components_bcc; #endif } template struct components #if !BOOST_WORKAROUND(__BORLANDC__, <= 0x565) : detail::components_impl #else : detail::components_bcc::type,T, ClassTypeTransform> #endif { typedef components type; BOOST_MPL_AUX_LAMBDA_SUPPORT(2,components,(T,ClassTypeTransform)) }; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - namespace detail { struct components_mpl_sequence_tag; struct components_non_func_base { typedef mpl::vector0<> types; typedef void function_arity; typedef detail::constant<0> bits; typedef detail::constant<0> mask; typedef components_mpl_sequence_tag tag; }; template < typename Components , typename IfTagged , typename ThenTag , typename DefaultBase = components_non_func_base > struct retagged_if : mpl::if_ < detail::represents_impl , detail::changed_tag , DefaultBase >::type { }; // We detect plain function types and function references as function // pointers by recursive instantiation of components_impl. // The third specialization of components_impl makes sure the recursion // terminates (when adding pointers). template struct components_impl : detail::retagged_if < detail::components_impl , pointer_tag, /* --> */ function_tag > { }; template struct components_impl : detail::retagged_if < detail::components_impl , pointer_tag, /* --> */ reference_tag > { }; #if !BOOST_FT_NO_CV_FUNC_SUPPORT // Retry the type with a member pointer attached to detect cv functions class a_class; template struct cv_func_base : detail::retagged_if { typedef typename mpl::remove < typename Base::types , typename detail::class_transform::type>::type types; }; template struct components_impl : mpl::if_ < detail::represents_impl< detail::components_impl , member_pointer_tag > , detail::cv_func_base< detail::components_impl, T, L> , components_non_func_base >::type { }; template struct components_impl : components_non_func_base { }; #else template struct components_impl : components_non_func_base { }; #endif template struct components_impl : components_impl { }; template struct components_impl : components_impl { }; template struct components_impl : components_impl { }; template struct components_impl : components_impl { }; template struct components_impl : components_impl { }; template struct components_impl : components_impl { }; template struct member_obj_ptr_result { typedef T & type; }; template struct member_obj_ptr_result { typedef T const & type; }; template struct member_obj_ptr_result { typedef T volatile & type; }; template struct member_obj_ptr_result { typedef T const volatile & type; }; template struct member_obj_ptr_result { typedef T & type; }; template struct member_obj_ptr_result { typedef T & type; }; template struct member_obj_ptr_result { typedef T & type; }; template struct member_obj_ptr_result { typedef T & type; }; template struct member_obj_ptr_components : member_object_pointer_base { typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector2< typename detail::member_obj_ptr_result::type, typename detail::class_transform::type > types; }; #if !BOOST_WORKAROUND(__BORLANDC__, <= 0x565) # define BOOST_FT_variations BOOST_FT_pointer|BOOST_FT_member_pointer template struct components_impl : member_obj_ptr_components { }; #else # define BOOST_FT_variations BOOST_FT_pointer // This workaround removes the member pointer from the type to allow // detection of member function pointers with BCC. template struct components_impl : detail::retagged_if < detail::components_impl::type *, L> , pointer_tag, /* --> */ member_function_pointer_tag , member_obj_ptr_components > { }; // BCC lets us test the cv-qualification of a function type by template // partial specialization - so we use this bug feature to find out the // member function's cv-qualification (unfortunately there are some // invisible modifiers that impose some limitations on these types even if // we remove the qualifiers, So we cannot exploit the same bug to make the // library work for cv-qualified function types). template struct encode_cv { typedef char (& type)[1]; BOOST_STATIC_CONSTANT(std::size_t, value = 1); }; template struct encode_cv { typedef char (& type)[2]; BOOST_STATIC_CONSTANT(std::size_t, value = 2); }; template struct encode_cv { typedef char (& type)[3]; BOOST_STATIC_CONSTANT(std::size_t, value = 3); }; template struct encode_cv { typedef char (& type)[4]; BOOST_STATIC_CONSTANT(std::size_t, value = 4); }; // For member function pointers we have to use a function template (partial // template specialization for a member pointer drops the cv qualification // of the function type). template typename encode_cv::type mfp_cv_tester(T C::*); template struct encode_mfp_cv { BOOST_STATIC_CONSTANT(std::size_t, value = sizeof(detail::mfp_cv_tester((T)0L))); }; // Associate bits with the CV codes above. template struct cv_tag_mfp_impl; template struct cv_tag_mfp : detail::cv_tag_mfp_impl < ::boost::function_types::detail::encode_mfp_cv::value > { }; template<> struct cv_tag_mfp_impl<1> : non_cv { }; template<> struct cv_tag_mfp_impl<2> : const_non_volatile { }; template<> struct cv_tag_mfp_impl<3> : volatile_non_const { }; template<> struct cv_tag_mfp_impl<4> : cv_qualified { }; // Metafunction to decode the cv code and apply it to a type. // We add a pointer, because otherwise cv-qualifiers won't stick (another bug). template struct decode_cv; template struct decode_cv : mpl::identity {}; template struct decode_cv : mpl::identity {}; template struct decode_cv : mpl::identity {}; template struct decode_cv : mpl::identity {}; // The class type transformation comes after adding cv-qualifiers. We have // wrap it to remove the pointer added in decode_cv_impl. template struct bcc_class_transform_impl; template struct bcc_class_transform_impl : class_transform { }; template struct bcc_class_transform : bcc_class_transform_impl < typename decode_cv < T , ::boost::function_types::detail::encode_mfp_cv::value >::type , L > { }; // After extracting the member pointee from the type the class type is still // in the type (somewhere -- you won't see with RTTI, that is) and that type // is flagged unusable and *not* identical to the nonmember function type. // We can, however, decompose this type via components_impl but surprisingly // a pointer to the const qualified class type pops up again as the first // parameter type. // We have to replace this type with the properly cv-qualified and // transformed class type, integrate the cv qualification into the bits. template struct mfp_components; template struct mfp_components { private: typedef typename mpl::front::type result_type; typedef typename detail::bcc_class_transform::type class_type; typedef mpl::vector2 result_and_class_type; typedef typename mpl::advance < typename mpl::begin::type , typename mpl::if_ < mpl::equal_to< typename detail::classifier::function_arity , typename Base::function_arity > , mpl::integral_c , mpl::integral_c >::type >::type from; typedef typename mpl::end::type to; typedef mpl::iterator_range param_types; typedef mpl::joint_view< result_and_class_type, param_types> types_view; public: typedef typename mpl::reverse_copy > >::type types; typedef typename function_types::tag< Base, detail::cv_tag_mfp >::bits bits; typedef typename Base::mask mask; typedef typename detail::classifier::function_arity function_arity; typedef components_mpl_sequence_tag tag; }; // Now put it all together: detect cv-qualification of function types and do // the weird transformations above for member function pointers. template struct components_bcc : mpl::if_ < detail::represents_impl< detail::components_impl , member_function_pointer_tag> , detail::mfp_components,T,OrigT,L> , detail::components_impl >::type { }; #endif // end of BORLAND WORKAROUND #define BOOST_FT_al_path boost/function_types/detail/components_impl #include } } // namespace function_types::detail BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,function_types::components) } // namespace ::boost #include #include #endif function_arity.hpp000444000765000024 203712161110614 25101 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_FUNCTION_ARITY_HPP_INCLUDED #define BOOST_FT_FUNCTION_ARITY_HPP_INCLUDED #include #include #include #include #include #include namespace boost { namespace function_types { template struct function_arity : mpl::if_ < function_types::is_callable_builtin , typename components::function_arity, boost::blank >::type { BOOST_MPL_AUX_LAMBDA_SUPPORT(1,function_arity,(T)) }; } BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,function_types::function_arity) } #endif is_callable_builtin.hpp000444000765000024 175712161110616 26036 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_IS_CALLABLE_BUILTIN_HPP_INCLUDED #define BOOST_FT_IS_CALLABLE_BUILTIN_HPP_INCLUDED #include #include #include namespace boost { namespace function_types { template< typename T, typename Tag = null_tag > struct is_callable_builtin : function_types::represents < function_types::components , function_types::tag > { BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_callable_builtin,(T,Tag)) }; } BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,function_types::is_callable_builtin) } #endif is_member_function_pointer.hpp000444000765000024 201712161110660 27452 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED #define BOOST_FT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED #include #include #include namespace boost { namespace function_types { template< typename T, typename Tag = null_tag > struct is_member_function_pointer : function_types::represents < function_types::components , function_types::tag > { BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_member_function_pointer,(T,Tag)) }; } BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,function_types::is_member_function_pointer) } #endif parameter_types.hpp000444000765000024 304012161110601 25237 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_PARAMETER_TYPES_HPP_INCLUDED #define BOOST_FT_PARAMETER_TYPES_HPP_INCLUDED #include #include #include #include #include #include #include namespace boost { namespace function_types { using mpl::placeholders::_; template< typename T, typename ClassTypeTransform = add_reference<_> > struct parameter_types; namespace detail { template struct parameter_types_impl : mpl::pop_front < typename function_types::components::types >::type { }; } template struct parameter_types : mpl::if_ < function_types::is_callable_builtin , detail::parameter_types_impl, boost::blank >::type { BOOST_MPL_AUX_LAMBDA_SUPPORT(2,parameter_types,(T,ClassTypeTransform)) }; } BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,function_types::parameter_types) } #endif property_tags.hpp000444000765000024 1101612161110657 24772 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_TAGS_HPP_INCLUDED #define BOOST_FT_DETAIL_TAGS_HPP_INCLUDED #include #include #include namespace boost { namespace function_types { namespace detail { typedef long bits_t; template struct constant : boost::integral_constant { }; template struct property_tag { typedef constant bits; typedef constant mask; }; template struct bits : T::bits { }; template struct mask : T::mask { }; // forward declaration, defined in pp_tags template struct encode_bits_impl; // forward declaration, defined in pp_tags template struct tag_ice; // forward declaration, defined in retag_default_cc template struct retag_default_cc; template struct encode_bits : constant< ::boost::function_types::detail::encode_bits_impl::value > { }; template struct compound_tag { typedef constant< ::boost::function_types::detail::tag_ice < ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value , ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value >::combined_bits > bits; typedef constant< ::boost::function_types::detail::tag_ice < ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value , ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value >::combined_mask > mask; }; template struct changed_tag : Base { typedef mpl::bitxor_ bits; }; template struct represents_impl : boost::integral_constant::value , ::boost::function_types::detail::mask::value , ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value >::match > { }; } // namespace detail typedef detail::property_tag<0,0> null_tag; template struct tag : detail::compound_tag< detail::compound_tag, detail::compound_tag > { }; #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION template struct tag : detail::compound_tag,Tag3> { }; template struct tag : detail::compound_tag { }; template struct tag : Tag1 { }; #endif template struct represents : detail::represents_impl > { }; template struct extract { typedef detail::constant< ::boost::function_types::detail::tag_ice < ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value , ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value >::extracted_bits > bits; typedef detail::constant< ::boost::function_types::detail::mask::value > mask; }; } } // namespace ::boost::function_types #include namespace boost { namespace function_types { #define BOOST_FT_cc_file #include } } // namespace boost::function_types #endif result_type.hpp000444000765000024 242212161110633 24422 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_RESULT_TYPE_HPP_INCLUDED #define BOOST_FT_RESULT_TYPE_HPP_INCLUDED #include #include #include #include #include #include #include namespace boost { namespace function_types { template< typename T > struct result_type; namespace detail { template struct result_type_impl : mpl::at_c < typename function_types::components::types, 0 > { }; } template struct result_type : mpl::if_ < function_types::is_callable_builtin , detail::result_type_impl, boost::blank >::type { BOOST_MPL_AUX_LAMBDA_SUPPORT(1,result_type,(T)) }; } BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,function_types::result_type) } #endif config000755000765000024 012161110640 22440 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_typescc_names.hpp000444000765000024 240512161110640 25057 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/config // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_CONFIG_CC_NAMES_HPP_INCLUDED #define BOOST_FT_CONFIG_CC_NAMES_HPP_INCLUDED #define BOOST_FT_BUILTIN_CC_NAMES \ (( IMPLICIT , implicit_cc , BOOST_PP_EMPTY ))\ (( CDECL , cdecl_cc , BOOST_PP_IDENTITY(__cdecl ) ))\ (( STDCALL , stdcall_cc , BOOST_PP_IDENTITY(__stdcall ) ))\ (( PASCAL , pascal_cc , BOOST_PP_IDENTITY(pascal ) ))\ (( FASTCALL , fastcall_cc , BOOST_PP_IDENTITY(__fastcall) ))\ (( CLRCALL , clrcall_cc , BOOST_PP_IDENTITY(__clrcall ) ))\ (( THISCALL , thiscall_cc , BOOST_PP_IDENTITY(__thiscall) ))\ (( IMPLICIT_THISCALL , thiscall_cc , BOOST_PP_EMPTY )) // append user-defined cc names to builtin ones #ifdef BOOST_FT_CC_NAMES # define BOOST_FT_CC_NAMES_SEQ BOOST_FT_BUILTIN_CC_NAMES BOOST_FT_CC_NAMES # define BOOST_FT_CC_PREPROCESSING 1 #else # define BOOST_FT_CC_NAMES_SEQ BOOST_FT_BUILTIN_CC_NAMES #endif #endif compiler.hpp000444000765000024 754112161110626 25133 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/config // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED #define BOOST_FT_CONFIG_COMPILER_HPP_INCLUDED #include #include #if defined(BOOST_MSVC) # if BOOST_MSVC < 1310 # error "unsupported compiler version" # endif # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS // enable clrcall calling covention (call to .NET managed code) when // compiling with /clr # if BOOST_MSVC >= 1400 && defined(__cplusplus_cli) # ifndef BOOST_FT_CC_CLRCALL # define BOOST_FT_CC_CLRCALL callable_builtin # endif # endif // Intel x86 architecture specific calling conventions # ifdef _M_IX86 # define BOOST_FT_COMMON_X86_CCs callable_builtin # if BOOST_MSVC < 1400 // version 7.1 is missing a keyword to specify the thiscall cc ... # ifndef BOOST_FT_CC_IMPLICIT_THISCALL # define BOOST_FT_CC_IMPLICIT_THISCALL non_variadic|member|callable_builtin # ifndef BOOST_FT_CONFIG_OK # pragma message("INFO| /Gd /Gr /Gz will compiler options will cause") # pragma message("INFO| a compile error.") # pragma message("INFO| Reconfigure Boost.FunctionTypes in this case.") # pragma message("INFO| This message can be suppressed by defining") # pragma message("INFO| BOOST_FT_CONFIG_OK.") # endif # endif # else // ...introduced in version 8 # ifndef BOOST_FT_CC_THISCALL # define BOOST_FT_CC_THISCALL non_variadic|member|callable_builtin # endif # endif # endif # endif #elif defined(__GNUC__) && !defined(BOOST_INTEL_LINUX) # if __GNUC__ < 3 # error "unsupported compiler version" # endif # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS # if defined(__i386__) # // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20439 # // see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29328 # if BOOST_WORKAROUND(__GNUC__,BOOST_TESTED_AT(4)) # ifndef BOOST_FT_CC_IMPLICIT # define BOOST_FT_CC_IMPLICIT member|callable_builtin # endif # define BOOST_FT_COMMON_X86_CCs non_member|callable_builtin # else # define BOOST_FT_COMMON_X86_CCs callable_builtin # endif # else # ifndef BOOST_FT_CC_IMPLICIT # define BOOST_FT_CC_IMPLICIT callable_builtin # endif # endif # endif # if (defined(BOOST_FT_CC_CDECL) || defined(BOOST_FT_COMMON_X86_CCs)) \ && !defined(__cdecl) # define __cdecl __attribute__((__cdecl__)) # endif # if (defined(BOOST_FT_CC_STDCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \ && !defined(__stdcall) # define __stdcall __attribute__((__stdcall__)) # endif # if (defined(BOOST_FT_CC_FASTCALL) || defined(BOOST_FT_COMMON_X86_CCs)) \ && !defined(__fastcall) # define __fastcall __attribute__((__fastcall__)) # endif #elif defined(__BORLANDC__) # if __BORLANDC__ < 0x550 # error "unsupported compiler version" # elif __BORLANDC__ > 0x565 # pragma message("WARNING: library untested with this compiler version") # endif # ifdef BOOST_FT_AUTODETECT_CALLING_CONVENTIONS # define BOOST_FT_COMMON_X86_CCs callable_builtin # endif // syntactic specialities of cc specifier # define BOOST_FT_SYNTAX(result,lparen,cc_spec,type_mod,name,rparen) \ result() cc_spec() lparen() type_mod() name() rparen() #else // only enable default calling convention # define BOOST_FT_CC_IMPLICIT callable_builtin #endif #endif config.hpp000444000765000024 362112161110601 24552 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/config // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_CONFIG_HPP_INCLUDED #define BOOST_FT_CONFIG_HPP_INCLUDED #include #include // maximum allowed arity #ifndef BOOST_FT_MAX_ARITY #define BOOST_FT_MAX_ARITY 20 #endif // the most common calling conventions for x86 architecture can be enabled at // once in the compiler config #ifdef BOOST_FT_COMMON_X86_CCs # ifndef BOOST_FT_CC_CDECL # define BOOST_FT_CC_CDECL BOOST_FT_COMMON_X86_CCs # endif # ifndef BOOST_FT_CC_STDCALL # define BOOST_FT_CC_STDCALL non_variadic|BOOST_FT_COMMON_X86_CCs # endif # ifndef BOOST_FT_CC_FASTCALL # define BOOST_FT_CC_FASTCALL non_variadic|BOOST_FT_COMMON_X86_CCs # endif #endif // where to place the cc specifier (the common way) #ifndef BOOST_FT_SYNTAX # define BOOST_FT_SYNTAX(result,lparen,cc_spec,type_mod,name,rparen) \ result() lparen() cc_spec() type_mod() name() rparen() #endif // param for nullary functions // set to "void" for compilers that require nullary functions to read // "R (void)" in template partial specialization #ifndef BOOST_FT_NULLARY_PARAM #define BOOST_FT_NULLARY_PARAM #endif // there is a pending defect report on cv qualified function types, so support // for these types is disabled, unless for compilers where it's known to work #ifndef BOOST_FT_NO_CV_FUNC_SUPPORT #define BOOST_FT_NO_CV_FUNC_SUPPORT 1 #endif // full preprocessing implies preprocessing of the ccs #if defined(BOOST_FT_PREPROCESSING_MODE) && !defined(BOOST_FT_CC_PREPROCESSING) # define BOOST_FT_CC_PREPROCESSING 1 #endif #endif detail000755000765000024 012161110702 22434 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_typesclass_transform.hpp000444000765000024 404712161110646 26516 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_CLASS_TRANSFORM_HPP_INCLUDED #define BOOST_FT_DETAIL_CLASS_TRANSFORM_HPP_INCLUDED #include #include #include #include #include #include #include namespace boost { namespace function_types { namespace detail { using mpl::placeholders::_; // Transformation metafunction for the class type of member function pointers. template struct class_transform { typedef typename mpl::apply1::type type; }; #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // We can short-circuit the mechanism implemented in the primary template for // the most common lambda expression and save both the "un-lambdaing" and the // type traits invocation (we know that T can only be a class type). template struct class_transform< T, mpl::identity<_> > { typedef T type; }; template struct class_transform< T, add_reference<_> > { typedef T & type; }; template struct class_transform< T, add_pointer<_> > { typedef T * type; }; template struct class_transform< T, remove_cv<_> > { typedef typename boost::remove_cv::type type; }; template struct class_transform< T, add_reference< remove_cv<_> > > { typedef typename boost::remove_cv::type & type; }; template struct class_transform< T, add_pointer< remove_cv<_> > > { typedef typename boost::remove_cv::type * type; }; template struct class_transform< T, mpl::always > { typedef U type; }; #endif } } } // namespace ::boost::function_types::detail #endif classifier.hpp000444000765000024 500712161110670 25434 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_CLASSIFIER_HPP_INCLUDED #define BOOST_FT_DETAIL_CLASSIFIER_HPP_INCLUDED #include #include #include #include #include #include #include namespace boost { namespace function_types { namespace detail { template struct classifier; template struct char_array { typedef char (&type)[S]; }; template struct encode_charr { typedef typename char_array< ::boost::function_types::detail::encode_charr_impl::value >::type type; }; char BOOST_TT_DECL classifier_impl(...); #define BOOST_FT_variations BOOST_FT_function|BOOST_FT_pointer|\ BOOST_FT_member_pointer #define BOOST_FT_type_function(cc,name) BOOST_FT_SYNTAX( \ R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,* BOOST_PP_EMPTY,name,BOOST_PP_RPAREN) #define BOOST_FT_type_function_pointer(cc,name) BOOST_FT_SYNTAX( \ R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,** BOOST_PP_EMPTY,name,BOOST_PP_RPAREN) #define BOOST_FT_type_member_function_pointer(cc,name) BOOST_FT_SYNTAX( \ R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,T0::** BOOST_PP_EMPTY,name,BOOST_PP_RPAREN) #define BOOST_FT_al_path boost/function_types/detail/classifier_impl #include template struct classifier_bits { static typename boost::add_reference::type tester; BOOST_STATIC_CONSTANT(bits_t,value = (bits_t)sizeof( boost::function_types::detail::classifier_impl(& tester) )-1); }; template struct classifier { typedef detail::constant< ::boost::function_types::detail::decode_bits< ::boost::function_types::detail::classifier_bits::value >::tag_bits > bits; typedef detail::full_mask mask; typedef detail::constant< ::boost::function_types::detail::decode_bits< ::boost::function_types::detail::classifier_bits::value >::arity > function_arity; }; } } } // namespace ::boost::function_types::detail #endif components_as_mpl_sequence.hpp000444000765000024 660512161110654 30727 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_COMPONENTS_AS_MPL_SEQUENCE_HPP_INCLUDED #define BOOST_FT_DETAIL_COMPONENTS_AS_MPL_SEQUENCE_HPP_INCLUDED #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace mpl { template<> struct size_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::size { }; }; template<> struct empty_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::empty { }; }; template<> struct front_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::front { }; }; template<> struct back_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::back { }; }; template<> struct at_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S, typename N > struct apply : mpl::at { }; }; template<> struct begin_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::begin { }; }; template<> struct end_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::end { }; }; template<> struct clear_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : S { typedef apply type; typedef typename mpl::clear< typename S::types >::type types; }; }; template<> struct push_front_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S, typename T > struct apply : S { typedef apply type; typedef typename mpl::push_front< typename S::types, T >::type types; }; }; template<> struct pop_front_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : S { typedef apply type; typedef typename mpl::pop_front< typename S::types >::type types; }; }; template<> struct push_back_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S, typename T > struct apply : S { typedef apply type; typedef typename mpl::push_back< typename S::types, T >::type types; }; }; template<> struct pop_back_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : S { typedef apply type; typedef typename mpl::pop_back< typename S::types >::type types; }; }; } } // namespace ::boost::mpl #endif cv_traits.hpp000444000765000024 1221712161110616 25327 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_CV_TRAITS_HPP_INCLUDED #define BOOST_FT_DETAIL_CV_TRAITS_HPP_INCLUDED #include #include #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ || BOOST_WORKAROUND(__BORLANDC__, <= 0x582) # include # include # include #endif #include namespace boost { namespace function_types { namespace detail { #if ! (defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ || BOOST_WORKAROUND(__BORLANDC__, <= 0x582)) template struct cv_traits { typedef non_cv tag; typedef T type; }; template struct cv_traits { typedef non_cv tag; typedef T type; }; template struct cv_traits { typedef non_cv tag; typedef T type; }; template struct cv_traits { typedef non_cv tag; typedef T type; }; template struct cv_traits { typedef non_cv tag; typedef T type; }; template struct cv_traits { typedef non_cv tag; typedef T type; }; template struct cv_traits { typedef const_non_volatile tag; typedef T type; }; template struct cv_traits { typedef const_non_volatile tag; typedef T type; }; template struct cv_traits { typedef const_non_volatile tag; typedef T type; }; template struct cv_traits { typedef const_non_volatile tag; typedef T type; }; template struct cv_traits { typedef const_non_volatile tag; typedef T type; }; template struct cv_traits { typedef const_non_volatile tag; typedef T type; }; template struct cv_traits { typedef volatile_non_const tag; typedef T type; }; template struct cv_traits { typedef volatile_non_const tag; typedef T type; }; template struct cv_traits { typedef volatile_non_const tag; typedef T type; }; template struct cv_traits { typedef volatile_non_const tag; typedef T type; }; template struct cv_traits { typedef volatile_non_const tag; typedef T type; }; template struct cv_traits { typedef volatile_non_const tag; typedef T type; }; template struct cv_traits { typedef cv_qualified tag; typedef T type; }; template struct cv_traits { typedef cv_qualified tag; typedef T type; }; template struct cv_traits { typedef cv_qualified tag; typedef T type; }; template struct cv_traits { typedef cv_qualified tag; typedef T type; }; template struct cv_traits { typedef cv_qualified tag; typedef T type; }; template struct cv_traits { typedef cv_qualified tag; typedef T type; }; #else template struct cv_tag_impl; template<> struct cv_tag_impl<1> { typedef non_cv type;}; template<> struct cv_tag_impl<2> { typedef const_non_volatile type; }; template<> struct cv_tag_impl<3> { typedef volatile_non_const type; }; template<> struct cv_tag_impl<4> { typedef cv_qualified type; }; typedef char (& case_1)[1]; typedef char (& case_2)[2]; typedef char (& case_3)[3]; typedef char (& case_4)[4]; template case_1 switch_cv(T *); template case_2 switch_cv(T const *); template case_3 switch_cv(T volatile *); template case_4 switch_cv(T const volatile *); template T * ref_to_ptr(T &); template T const * ref_to_ptr(T const &); template T volatile * ref_to_ptr(T volatile &); template T const volatile * ref_to_ptr(T const volatile &); template T * ref_to_ptr(T * const volatile &); template struct cv_code { static T _t; BOOST_STATIC_CONSTANT(std::size_t, value = sizeof(::boost::function_types::detail::switch_cv( ::boost::function_types::detail::ref_to_ptr(_t) ) )); }; template struct cv_traits { typedef typename boost::function_types::detail::cv_tag_impl< ::boost::function_types::detail::cv_code::value >::type tag; // may require Boost.TypeTraits broken compiler specializations // to work typedef typename boost::remove_cv< typename boost::remove_pointer< typename boost::remove_reference::type >::type >::type type; }; #endif } } } // namespace boost::function_types::detail #endif pp_arity_loop.hpp000444000765000024 1206012161110613 26202 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion #ifndef BOOST_FT_PREPROCESSING_MODE // input: BOOST_FT_mfp 0 or 1 <=> member function pointer? // input: BOOST_FT_type_name BOOST_FT_type --> "R (* ..._type_name)()" (pass2) #endif // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix #ifdef __WAVE__ # pragma wave option(preserve: 0) #endif #ifndef BOOST_FT_ARITY_LOOP_IS_ITERATING # define BOOST_FT_AL_PREPROCESSED \ BOOST_FT_AL_FILE(BOOST_FT_al_path,BOOST_FT_FROM_ARITY,BOOST_FT_mfp) # define BOOST_FT_AL_FILE(base_path,max_arity,mfp) \ BOOST_FT_AL_FILE_I(base_path,max_arity,mfp) # define BOOST_FT_AL_FILE_I(base_path,max_arity,mfp) \ # if !defined(BOOST_FT_PREPROCESSING_MODE) # if BOOST_FT_MAX_ARITY < 10 # define BOOST_FT_FROM_ARITY 0 # elif BOOST_FT_MAX_ARITY < 20 # define BOOST_FT_FROM_ARITY 10 # elif BOOST_FT_MAX_ARITY < 30 # define BOOST_FT_FROM_ARITY 20 # elif BOOST_FT_MAX_ARITY < 40 # define BOOST_FT_FROM_ARITY 30 # endif # if BOOST_FT_FROM_ARITY # include BOOST_FT_AL_PREPROCESSED # endif # elif !defined(BOOST_FT_FROM_ARITY) // single pass preprocessing # define BOOST_FT_FROM_ARITY 0 # elif BOOST_FT_FROM_ARITY > 0 // arity20 includes arity10 BOOST_PP_EXPAND(#) include BOOST_FT_AL_PREPROCESSED # endif # undef BOOST_FT_AL_PREPROCESSED # undef BOOST_FT_AL_FILE # undef BOOST_FT_AL_FILE_I # if BOOST_FT_MAX_ARITY > BOOST_FT_FROM_ARITY # ifndef BOOST_FT_DETAIL_ARITY_LOOP_HPP_INCLUDED # define BOOST_FT_DETAIL_ARITY_LOOP_HPP_INCLUDED # include # include # include # include # include # include # include # include # include # include # endif # define BOOST_FT_AL_INCLUDE_FILE # define BOOST_FT_ARITY_LOOP_PREFIX 1 # include BOOST_FT_AL_INCLUDE_FILE # undef BOOST_FT_ARITY_LOOP_PREFIX # if !BOOST_PP_IS_ITERATING # define BOOST_PP_FILENAME_1 BOOST_FT_AL_INCLUDE_FILE # elif BOOST_PP_ITERATION_DEPTH() == 1 # define BOOST_PP_FILENAME_2 BOOST_FT_AL_INCLUDE_FILE # else # error "loops nested too deeply" # endif # define BOOST_FT_arity BOOST_PP_ITERATION() # define BOOST_FT_n BOOST_PP_INC(BOOST_FT_arity) # define BOOST_FT_type \ BOOST_FT_syntax(BOOST_FT_cc,BOOST_FT_type_name BOOST_PP_EMPTY)\ (BOOST_FT_params(BOOST_PP_EMPTY) BOOST_FT_ell) BOOST_FT_cv # define BOOST_FT_tplargs(prefx) \ prefx() R BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_FT_arity,prefx() T) # if !BOOST_FT_mfp # define BOOST_FT_params(prefx) \ BOOST_PP_IF(BOOST_FT_arity,BOOST_PP_ENUM_PARAMS, \ BOOST_FT_nullary_param BOOST_PP_TUPLE_EAT(2))( \ BOOST_FT_arity,prefx() T) # else # define BOOST_FT_params(prefx) \ BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_FT_arity,prefx() T) # endif # if !BOOST_FT_FROM_ARITY # define BOOST_PP_ITERATION_LIMITS (BOOST_FT_mfp, BOOST_FT_MAX_ARITY) # else # define BOOST_PP_ITERATION_LIMITS \ (BOOST_FT_FROM_ARITY+1, BOOST_FT_MAX_ARITY) # endif # define BOOST_FT_ARITY_LOOP_IS_ITERATING 1 # include BOOST_PP_ITERATE() # undef BOOST_FT_ARITY_LOOP_IS_ITERATING # undef BOOST_FT_arity # undef BOOST_FT_params # undef BOOST_FT_tplargs # undef BOOST_FT_type # define BOOST_FT_ARITY_LOOP_SUFFIX 1 # include BOOST_FT_AL_INCLUDE_FILE # undef BOOST_FT_ARITY_LOOP_SUFFIX # undef BOOST_FT_AL_INCLUDE_FILE # endif # undef BOOST_FT_FROM_ARITY #else # error "attempt to nest arity loops" #endif pp_loop.hpp000444000765000024 512712161110702 24757 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusions #ifndef BOOST_FT_DETAIL_PP_LOOP_HPP_INCLUDED #define BOOST_FT_DETAIL_PP_LOOP_HPP_INCLUDED # include # include # include #endif #include #include #if defined(BOOST_FT_PREPROCESSING_MODE) # define BOOST_FT_loop #else # define BOOST_FT_loop \ #endif #if defined(BOOST_FT_al_path) # define BOOST_FT_cc_file \ # define BOOST_FT_variate_file \ # ifndef BOOST_FT_type_function # define BOOST_FT_type_function(cc,name) BOOST_FT_SYNTAX( \ R BOOST_PP_EMPTY,BOOST_PP_EMPTY,cc,BOOST_PP_EMPTY,name,BOOST_PP_EMPTY) # endif # ifndef BOOST_FT_type_function_pointer # define BOOST_FT_type_function_pointer(cc,name) BOOST_FT_SYNTAX( \ R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,* BOOST_PP_EMPTY,name,BOOST_PP_RPAREN) # endif # ifndef BOOST_FT_type_function_reference # define BOOST_FT_type_function_reference(cc,name) BOOST_FT_SYNTAX( \ R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,& BOOST_PP_EMPTY,name,BOOST_PP_RPAREN) # endif # ifndef BOOST_FT_type_member_function_pointer # define BOOST_FT_type_member_function_pointer(cc,name) BOOST_FT_SYNTAX( \ R BOOST_PP_EMPTY,BOOST_PP_LPAREN,cc,T0::* BOOST_PP_EMPTY,name,BOOST_PP_RPAREN) # endif # include BOOST_FT_loop # undef BOOST_FT_type_function # undef BOOST_FT_type_function_pointer # undef BOOST_FT_type_function_reference # undef BOOST_FT_type_member_function_pointer # undef BOOST_FT_variations # undef BOOST_FT_variate_file # undef BOOST_FT_cc_file # undef BOOST_FT_al_path #elif defined(BOOST_FT_cc_file) # include BOOST_FT_loop # undef BOOST_FT_cc_file #else # error "argument missing" #endif #undef BOOST_FT_loop #include #include retag_default_cc.hpp000444000765000024 126112161110601 26553 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_RETAG_DEFAULT_CC_HPP_INCLUDED #define BOOST_FT_DETAIL_RETAG_DEFAULT_CC_HPP_INCLUDED #include #include #if defined(BOOST_FT_PREPROCESSING_MODE) # include #else # include #endif #endif synthesize.hpp000444000765000024 432312161110700 25507 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_SYNTHESIZE_HPP_INCLUDED #define BOOST_FT_DETAIL_SYNTHESIZE_HPP_INCLUDED #include #include #include #include #include #include #include namespace boost { namespace function_types { namespace detail { template struct synthesize_impl_o { template struct synthesize_impl_i { }; }; template struct synthesize_impl : detail::synthesize_impl_o < ::boost::function_types::detail::decode_bits::flags , ::boost::function_types::detail::decode_bits::cc_id , ::boost::mpl::size::value > ::template synthesize_impl_i { }; template struct synthesize_func : detail::synthesize_impl < Seq , ::boost::function_types::detail::bits < detail::retag_default_cc < function_types::tag > >::value > { }; template struct synthesize_mfp : detail::synthesize_impl < Seq , ::boost::function_types::detail::bits < detail::retag_default_cc < function_types::tag < typename detail::cv_traits< typename mpl::at_c::type >::tag , nv_dcc_mfp, Tag > > >::value > { }; template::type, typename C = typename mpl::at_c::type> struct synthesize_mop { typedef R C::* type; }; #define BOOST_FT_variations BOOST_FT_function|BOOST_FT_member_pointer #define BOOST_FT_al_path boost/function_types/detail/synthesize_impl #include } } } // namespace ::boost::function_types::detail #endif to_sequence.hpp000444000765000024 235212161110666 25627 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_TO_SEQUENCE_HPP_INCLUDED #define BOOST_FT_DETAIL_TO_SEQUENCE_HPP_INCLUDED #include #include #include #include #include #include namespace boost { namespace function_types { namespace detail { // wrap first arguments in components, if callable builtin type template struct to_sequence { typedef typename mpl::eval_if < is_callable_builtin , to_sequence< components > , mpl::identity< T > >::type type; }; #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // reduce template instantiations, if possible template struct to_sequence< components > { typedef typename components::types type; }; #endif } } } // namespace ::boost::function_types::detail #endif classifier_impl000755000765000024 012161110700 25577 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detailarity10_0.hpp000444000765000024 754212161110655 30176 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix template< typename R > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (BOOST_FT_nullary_param BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv); arity10_1.hpp000444000765000024 715212161110640 30166 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix template< typename R , typename T0 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) ( BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv); arity20_0.hpp000444000765000024 1330312161110601 30176 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv); arity20_1.hpp000444000765000024 1322112161110700 30176 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv); arity30_0.hpp000444000765000024 1736712161110646 30226 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); arity30_1.hpp000444000765000024 1730512161110630 30210 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); arity40_0.hpp000444000765000024 2345312161110612 30211 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); arity40_1.hpp000444000765000024 2337112161110636 30217 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); arity50_0.hpp000444000765000024 2753712161110645 30227 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 , T49 BOOST_FT_ell) BOOST_FT_cv); arity50_1.hpp000444000765000024 2745312161110615 30222 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 > typename encode_charr ::type classifier_impl(BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv); master.hpp000444000765000024 170712161110637 27756 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/classifier_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion #if BOOST_FT_ARITY_LOOP_PREFIX # ifndef BOOST_FT_DETAIL_CLASSIFIER_IMPL_MASTER_HPP_INCLUDED # define BOOST_FT_DETAIL_CLASSIFIER_IMPL_MASTER_HPP_INCLUDED # include # endif # define BOOST_FT_type_name #elif BOOST_FT_ARITY_LOOP_IS_ITERATING template< BOOST_FT_tplargs(BOOST_PP_IDENTITY(typename)) > typename encode_charr::type classifier_impl(BOOST_FT_type); #elif BOOST_FT_ARITY_LOOP_SUFFIX # undef BOOST_FT_type_name #else # error "attempt to use arity loop master file without loop" #endif components_impl000755000765000024 012161110674 25652 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detailarity10_0.hpp000444000765000024 1747012161110657 30262 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix template< typename R, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector1< R BOOST_FT_nullary_param > types; }; template< typename R , typename T0, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector2< R , T0 > types; }; template< typename R , typename T0 , typename T1, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector3< R , T0 , T1 > types; }; template< typename R , typename T0 , typename T1 , typename T2, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector4< R , T0 , T1 , T2 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector5< R , T0 , T1 , T2 , T3 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector6< R , T0 , T1 , T2 , T3 , T4 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector7< R , T0 , T1 , T2 , T3 , T4 , T5 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector8< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector9< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector10< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector11< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > types; }; arity10_1.hpp000444000765000024 1717512161110641 30256 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix template< typename R , typename T0, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector2< R, typename class_transform ::type > types; }; template< typename R , typename T0 , typename T1, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector3< R, typename class_transform ::type , T1 > types; }; template< typename R , typename T0 , typename T1 , typename T2, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector4< R, typename class_transform ::type , T1 , T2 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector5< R, typename class_transform ::type , T1 , T2 , T3 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector6< R, typename class_transform ::type , T1 , T2 , T3 , T4 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector7< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector8< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector9< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector10< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector11< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > types; }; arity20_0.hpp000444000765000024 2461512161110646 30260 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector12< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector13< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector14< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector15< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector16< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector17< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector18< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector19< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector20< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector21< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > types; }; arity20_1.hpp000444000765000024 2537712161110654 30266 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector12< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector13< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector14< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector15< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector16< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector17< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector18< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector19< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector20< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector21< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > types; }; arity30_0.hpp000444000765000024 3316112161110653 30253 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector22< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector23< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector24< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector25< 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector26< 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector27< 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 , T25 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector28< 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 , T25 , T26 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector29< 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 , T25 , T26 , T27 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector30< 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 , T25 , T26 , T27 , T28 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector31< 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 , T25 , T26 , T27 , T28 , T29 > types; }; arity30_1.hpp000444000765000024 3374312161110674 30265 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector22< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector23< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector24< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector25< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector26< R, typename class_transform ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector27< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector28< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector29< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector30< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector31< R, typename class_transform ::type , 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 > types; }; arity40_0.hpp000444000765000024 4152512161110645 30260 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector32< 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 , T25 , T26 , T27 , T28 , T29 , T30 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector33< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector34< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector35< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector36< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector37< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector38< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector39< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector40< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector41< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > types; }; arity40_1.hpp000444000765000024 4230712161110660 30255 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector32< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector33< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector34< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector35< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector36< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector37< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector38< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector39< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector40< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector41< R, typename class_transform ::type , 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 > types; }; arity50_0.hpp000444000765000024 5007112161110643 30253 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector42< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector43< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector44< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector45< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector46< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector47< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector48< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector49< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector50< 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 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector51< 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 , 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 > types; }; arity50_1.hpp000444000765000024 5065312161110647 30266 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector42< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector43< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector44< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector45< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector46< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector47< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector48< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector49< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector50< R, typename class_transform ::type , 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 > types; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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, typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef mpl::vector51< R, typename class_transform ::type , 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 > types; }; master.hpp000444000765000024 354012161110612 30005 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/components_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion #if BOOST_FT_ARITY_LOOP_PREFIX # ifndef BOOST_FT_DETAIL_COMPONENTS_IMPL_MASTER_HPP_INCLUDED # define BOOST_FT_DETAIL_COMPONENTS_IMPL_MASTER_HPP_INCLUDED # include # include # include # include # include # endif # define BOOST_FT_type_name # if !BOOST_FT_mfp # define BOOST_FT_types \ R BOOST_PP_COMMA_IF(BOOST_FT_arity) BOOST_FT_params(BOOST_PP_EMPTY) # else # define BOOST_FT_types \ R, typename class_transform::type \ BOOST_PP_COMMA_IF(BOOST_PP_DEC(BOOST_FT_arity)) \ BOOST_FT_params(BOOST_PP_EMPTY) # endif #elif BOOST_FT_ARITY_LOOP_IS_ITERATING template< BOOST_FT_tplargs(BOOST_PP_IDENTITY(typename)), typename L> struct components_impl { typedef encode_bits bits; typedef constant mask; typedef function_types::components type; typedef components_mpl_sequence_tag tag; typedef mpl::integral_c function_arity; typedef BOOST_PP_CAT(mpl::vector,BOOST_FT_n)< BOOST_FT_types > types; }; #elif BOOST_FT_ARITY_LOOP_SUFFIX # undef BOOST_FT_types # undef BOOST_FT_type_name #else # error "attempt to use arity loop master file without loop" #endif encoding000755000765000024 012161110672 24230 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detailaliases_def.hpp000444000765000024 110612161110651 27330 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/encoding // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusions #define callable_builtin BOOST_FT_callable_builtin #define member BOOST_FT_member_pointer #define non_member BOOST_FT_non_member #define variadic BOOST_FT_variadic #define non_variadic BOOST_FT_non_variadic aliases_undef.hpp000444000765000024 66712161110601 27661 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/encoding // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusions #undef callable_builtin #undef member #undef non_member #undef variadic #undef non_variadic def.hpp000444000765000024 426712161110672 25645 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/encoding // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusions // Type encoding: // // bit 0: callable builtin // bit 1: non member // bit 2: naked function // bit 3: pointer // bit 4: reference // bit 5: member pointer // bit 6: member function pointer // bit 7: member object pointer #define BOOST_FT_type_mask 0x000000ff // 1111 1111 #define BOOST_FT_callable_builtin 0x00000001 // 0000 0001 #define BOOST_FT_non_member 0x00000002 // 0000 0010 #define BOOST_FT_function 0x00000007 // 0000 0111 #define BOOST_FT_pointer 0x0000000b // 0000 1011 #define BOOST_FT_reference 0x00000013 // 0001 0011 #define BOOST_FT_non_member_callable_builtin 0x00000003 // 0000 0011 #define BOOST_FT_member_pointer 0x00000020 // 0010 0000 #define BOOST_FT_member_function_pointer 0x00000061 // 0110 0001 #define BOOST_FT_member_object_pointer 0x000000a3 // 1010 0001 #define BOOST_FT_member_object_pointer_flags 0x000002a3 #define BOOST_FT_variadic 0x00000100 #define BOOST_FT_non_variadic 0x00000200 #define BOOST_FT_variadic_mask 0x00000300 #define BOOST_FT_const 0x00000400 #define BOOST_FT_volatile 0x00000800 #define BOOST_FT_default_cc 0x00008000 #define BOOST_FT_cc_mask 0x00ff8000 #define BOOST_FT_kind_mask 0x000000fc #define BOOST_FT_flags_mask 0x00000fff #define BOOST_FT_full_mask 0x00ff0fff #define BOOST_FT_arity_shift 24 #define BOOST_FT_arity_mask 0x7f000000 undef.hpp000444000765000024 177312161110625 26205 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/encoding // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion #undef BOOST_FT_type_mask #undef BOOST_FT_kind_mask #undef BOOST_FT_callable_builtin #undef BOOST_FT_non_member #undef BOOST_FT_function #undef BOOST_FT_pointer #undef BOOST_FT_reference #undef BOOST_FT_non_member_callable_builtin #undef BOOST_FT_member_pointer #undef BOOST_FT_member_function_pointer #undef BOOST_FT_member_object_pointer #undef BOOST_FT_member_object_pointer_flags #undef BOOST_FT_variadic #undef BOOST_FT_non_variadic #undef BOOST_FT_variadic_mask #undef BOOST_FT_const #undef BOOST_FT_volatile #undef BOOST_FT_default_cc #undef BOOST_FT_cc_mask #undef BOOST_FT_flags_mask #undef BOOST_FT_full_mask #undef BOOST_FT_arity_mask pp_cc_loop000755000765000024 012161110663 24557 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detailmaster.hpp000444000765000024 1077312161110657 26753 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_cc_loop // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusions #ifdef __WAVE__ // this file has been generated from the master.hpp file in the same directory # pragma wave option(preserve: 0) #endif #if !BOOST_PP_IS_ITERATING # ifndef BOOST_FT_DETAIL_CC_LOOP_MASTER_HPP_INCLUDED # define BOOST_FT_DETAIL_CC_LOOP_MASTER_HPP_INCLUDED # include # include # include # include # include # include # include # include # endif # include # include # define BOOST_PP_FILENAME_1 \ # define BOOST_PP_ITERATION_LIMITS \ (0,BOOST_PP_SEQ_SIZE(BOOST_FT_CC_NAMES_SEQ)-1) # include BOOST_PP_ITERATE() # if !defined(BOOST_FT_config_valid) && BOOST_FT_CC_PREPROCESSING # define BOOST_FT_cc_id 1 # define BOOST_FT_cc_name implicit_cc # define BOOST_FT_cc BOOST_PP_EMPTY # define BOOST_FT_cond callable_builtin # include BOOST_FT_cc_file # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # elif !defined(BOOST_FT_config_valid) // and generating preprocessed file BOOST_PP_EXPAND(#) ifndef BOOST_FT_config_valid BOOST_PP_EXPAND(#) define BOOST_FT_cc_id 1 BOOST_PP_EXPAND(#) define BOOST_FT_cc_name implicit_cc BOOST_PP_EXPAND(#) define BOOST_FT_cc BOOST_PP_EMPTY BOOST_PP_EXPAND(#) define BOOST_FT_cond callable_builtin #define _() BOOST_PP_EXPAND(#) include BOOST_FT_cc_file #undef _ BOOST_PP_EXPAND(#) undef BOOST_FT_cond BOOST_PP_EXPAND(#) undef BOOST_FT_cc_name BOOST_PP_EXPAND(#) undef BOOST_FT_cc BOOST_PP_EXPAND(#) undef BOOST_FT_cc_id BOOST_PP_EXPAND(#) else BOOST_PP_EXPAND(#) undef BOOST_FT_config_valid BOOST_PP_EXPAND(#) endif # else # undef BOOST_FT_config_valid # endif # include # include #elif BOOST_FT_CC_PREPROCESSING # define BOOST_FT_cc_id BOOST_PP_INC(BOOST_PP_FRAME_ITERATION(1)) # define BOOST_FT_cc_inf \ BOOST_PP_SEQ_ELEM(BOOST_PP_FRAME_ITERATION(1),BOOST_FT_CC_NAMES_SEQ) # define BOOST_FT_cc_pp_name BOOST_PP_TUPLE_ELEM(3,0,BOOST_FT_cc_inf) # define BOOST_FT_cc_name BOOST_PP_TUPLE_ELEM(3,1,BOOST_FT_cc_inf) # define BOOST_FT_cc BOOST_PP_TUPLE_ELEM(3,2,BOOST_FT_cc_inf) # define BOOST_FT_cond BOOST_PP_CAT(BOOST_FT_CC_,BOOST_FT_cc_pp_name) # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_pp_name # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # undef BOOST_FT_cc_inf #else // if generating preprocessed file BOOST_PP_EXPAND(#) define BOOST_FT_cc_id BOOST_PP_INC(BOOST_PP_ITERATION()) # define BOOST_FT_cc_inf \ BOOST_PP_SEQ_ELEM(BOOST_PP_ITERATION(),BOOST_FT_CC_NAMES_SEQ) # define BOOST_FT_cc_pp_name BOOST_PP_TUPLE_ELEM(3,0,BOOST_FT_cc_inf) # define BOOST_FT_CC_DEF(name,index) \ name BOOST_PP_TUPLE_ELEM(3,index,BOOST_FT_cc_inf) BOOST_PP_EXPAND(#) define BOOST_FT_CC_DEF(BOOST_FT_cc_name,1) BOOST_PP_EXPAND(#) define BOOST_FT_CC_DEF(BOOST_FT_cc,2) # undef BOOST_FT_CC_DEF # define BOOST_FT_cc_cond_v BOOST_PP_CAT(BOOST_FT_CC_,BOOST_FT_cc_pp_name) BOOST_PP_EXPAND(#) define BOOST_FT_cond BOOST_FT_cc_cond_v # undef BOOST_FT_cc_cond_v # undef BOOST_FT_cc_pp_name # undef BOOST_FT_cc_inf BOOST_PP_EXPAND(#) if BOOST_FT_cond BOOST_PP_EXPAND(#) define BOOST_FT_config_valid 1 #define _() BOOST_PP_EXPAND(#) include BOOST_FT_cc_file #undef _ BOOST_PP_EXPAND(#) endif BOOST_PP_EXPAND(#) undef BOOST_FT_cond BOOST_PP_EXPAND(#) undef BOOST_FT_cc_name BOOST_PP_EXPAND(#) undef BOOST_FT_cc BOOST_PP_EXPAND(#) undef BOOST_FT_cc_id #endif preprocessed.hpp000444000765000024 666012161110663 30133 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_cc_loop // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusions // this file has been generated from the master.hpp file in the same directory # define BOOST_FT_cc_id 1 # define BOOST_FT_cc_name implicit_cc # define BOOST_FT_cc BOOST_PP_EMPTY # define BOOST_FT_cond BOOST_FT_CC_IMPLICIT # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # define BOOST_FT_cc_id 2 # define BOOST_FT_cc_name cdecl_cc # define BOOST_FT_cc BOOST_PP_IDENTITY(__cdecl ) # define BOOST_FT_cond BOOST_FT_CC_CDECL # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # define BOOST_FT_cc_id 3 # define BOOST_FT_cc_name stdcall_cc # define BOOST_FT_cc BOOST_PP_IDENTITY(__stdcall ) # define BOOST_FT_cond BOOST_FT_CC_STDCALL # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # define BOOST_FT_cc_id 4 # define BOOST_FT_cc_name pascal_cc # define BOOST_FT_cc BOOST_PP_IDENTITY(pascal ) # define BOOST_FT_cond BOOST_FT_CC_PASCAL # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # define BOOST_FT_cc_id 5 # define BOOST_FT_cc_name fastcall_cc # define BOOST_FT_cc BOOST_PP_IDENTITY(__fastcall) # define BOOST_FT_cond BOOST_FT_CC_FASTCALL # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # define BOOST_FT_cc_id 6 # define BOOST_FT_cc_name clrcall_cc # define BOOST_FT_cc BOOST_PP_IDENTITY(__clrcall ) # define BOOST_FT_cond BOOST_FT_CC_CLRCALL # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # define BOOST_FT_cc_id 7 # define BOOST_FT_cc_name thiscall_cc # define BOOST_FT_cc BOOST_PP_IDENTITY(__thiscall) # define BOOST_FT_cond BOOST_FT_CC_THISCALL # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # define BOOST_FT_cc_id 8 # define BOOST_FT_cc_name thiscall_cc # define BOOST_FT_cc BOOST_PP_EMPTY # define BOOST_FT_cond BOOST_FT_CC_IMPLICIT_THISCALL # if BOOST_FT_cond # define BOOST_FT_config_valid 1 # include BOOST_FT_cc_file # endif # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # ifndef BOOST_FT_config_valid # define BOOST_FT_cc_id 1 # define BOOST_FT_cc_name implicit_cc # define BOOST_FT_cc BOOST_PP_EMPTY # define BOOST_FT_cond 0x00000001 # include BOOST_FT_cc_file # undef BOOST_FT_cond # undef BOOST_FT_cc_name # undef BOOST_FT_cc # undef BOOST_FT_cc_id # else # undef BOOST_FT_config_valid # endif pp_retag_default_cc000755000765000024 012161110702 26406 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detailmaster.hpp000444000765000024 622312161110643 30556 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_retag_default_cc // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is guarded externally #ifdef __WAVE__ // this file has been generated from the master.hpp file in the same directory # pragma wave option(preserve: 0) #endif #if !defined(BOOST_PP_VALUE) # include # include # include # include namespace boost { namespace function_types { namespace detail { template struct selector_bits { # define BOOST_PP_VALUE non_member|member|non_variadic|variadic # include BOOST_PP_ASSIGN_SLOT(1) BOOST_STATIC_CONSTANT(bits_t, value = ( (::boost::function_types::detail::bits::value & BOOST_FT_default_cc) | (::boost::function_types::detail::bits::value & BOOST_PP_SLOT(1)) )); }; template struct default_cc_tag; template struct retag_default_cc : detail::compound_tag < Tag, detail::default_cc_tag< ::boost::function_types::detail::selector_bits::value > > { }; template struct default_cc_tag { typedef null_tag::bits bits; typedef null_tag::mask mask; }; class test_class; typedef constant cc_mask_constant; # define BOOST_FT_self \ # define default_cc_ BOOST_FT_default_cc # define BOOST_PP_VALUE default_cc_|non_member|non_variadic # define BOOST_FT_tester void (*tester)() # define BOOST_PP_INDIRECT_SELF BOOST_FT_self # include BOOST_PP_INCLUDE_SELF() # define BOOST_PP_VALUE default_cc_|non_member|variadic # define BOOST_FT_tester void (*tester)(...) # define BOOST_PP_INDIRECT_SELF BOOST_FT_self # include BOOST_PP_INCLUDE_SELF() # define BOOST_PP_VALUE default_cc_|member|non_variadic # define BOOST_FT_tester void (test_class::*tester)() # define BOOST_PP_INDIRECT_SELF BOOST_FT_self # include BOOST_PP_INCLUDE_SELF() # define BOOST_PP_VALUE default_cc_|member|variadic # define BOOST_FT_tester void (test_class::*tester)(...) # define BOOST_PP_INDIRECT_SELF BOOST_FT_self # include BOOST_PP_INCLUDE_SELF() # undef default_cc_ # undef BOOST_FT_self } } } // namespace ::boost::function_types::detail # include # include #else // if defined(BOOST_PP_VALUE) # include BOOST_PP_ASSIGN_SLOT(1) template<> struct default_cc_tag { typedef BOOST_FT_tester; typedef mpl::bitand_::bits,cc_mask_constant> bits; typedef cc_mask_constant mask; }; # undef BOOST_FT_tester #endif preprocessed.hpp000444000765000024 360112161110702 31752 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_retag_default_cc // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is guarded externally // this file has been generated from the master.hpp file in the same directory namespace boost { namespace function_types { namespace detail { template struct selector_bits { BOOST_STATIC_CONSTANT(bits_t, value = ( (::boost::function_types::detail::bits ::value & 0x00008000) | (::boost::function_types::detail::bits ::value & 802) )); }; template struct default_cc_tag; template struct retag_default_cc : detail::compound_tag < Tag, detail::default_cc_tag< ::boost::function_types::detail::selector_bits ::value > > { }; template struct default_cc_tag { typedef null_tag::bits bits; typedef null_tag::mask mask; }; class test_class; typedef constant<0x00ff8000> cc_mask_constant; template< > struct default_cc_tag<33282> { typedef void ( *tester)(); typedef mpl::bitand_ ::bits,cc_mask_constant> bits; typedef cc_mask_constant mask; }; template< > struct default_cc_tag<33026> { typedef void ( *tester)( ... ); typedef mpl::bitand_ ::bits,cc_mask_constant> bits; typedef cc_mask_constant mask; }; template< > struct default_cc_tag<33312> { typedef void (test_class:: *tester)(); typedef mpl::bitand_ ::bits,cc_mask_constant> bits; typedef cc_mask_constant mask; }; template< > struct default_cc_tag<33056> { typedef void (test_class:: *tester)( ... ); typedef mpl::bitand_ ::bits,cc_mask_constant> bits; typedef cc_mask_constant mask; }; } } } pp_tags000755000765000024 012161110655 24100 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detailcc_tag.hpp000444000765000024 75512161110615 26151 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_tags // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusions struct BOOST_FT_cc_name { typedef detail::encode_bits<0,BOOST_FT_cc_id> bits; typedef detail::constant mask; }; master.hpp000444000765000024 1145112161110655 26263 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_tags // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is guarded externally #ifdef __WAVE__ // this file has been generated from the master.hpp file in the same directory # pragma wave option(preserve: 0) #endif #if !defined(BOOST_FT_PREPROCESSING_MODE) || defined(BOOST_FT_CONFIG_HPP_INCLUDED) # error "this file used with two-pass preprocessing, only" #endif #include #include namespace boost { namespace function_types { typedef detail::property_tag non_variadic; typedef detail::property_tag variadic; typedef detail::property_tag<0,BOOST_FT_const> non_const; typedef detail::property_tag const_qualified; typedef detail::property_tag<0,BOOST_FT_volatile> non_volatile; typedef detail::property_tag volatile_qualified; typedef detail::property_tag default_cc; #define BOOST_PP_VALUE BOOST_FT_const|BOOST_FT_volatile #include BOOST_PP_ASSIGN_SLOT(1) typedef detail::property_tag<0 , BOOST_PP_SLOT(1)> non_cv; typedef detail::property_tag const_non_volatile; typedef detail::property_tag volatile_non_const; typedef detail::property_tag cv_qualified; namespace detail { typedef constant full_mask; template struct encode_bits_impl { BOOST_STATIC_CONSTANT( bits_t, value = Flags | (BOOST_FT_default_cc * CCID) << 1 ); }; template struct encode_charr_impl { BOOST_STATIC_CONSTANT(std::size_t, value = (std::size_t)(1+ Flags | (BOOST_FT_default_cc * CCID) << 1 | Arity << BOOST_FT_arity_shift )); }; template struct decode_bits { BOOST_STATIC_CONSTANT(bits_t, flags = Bits & BOOST_FT_flags_mask); BOOST_STATIC_CONSTANT(bits_t, cc_id = ( (Bits & BOOST_FT_full_mask) / BOOST_FT_default_cc) >> 1 ); BOOST_STATIC_CONSTANT(bits_t, tag_bits = (Bits & BOOST_FT_full_mask)); BOOST_STATIC_CONSTANT(std::size_t, arity = (std::size_t) (Bits >> BOOST_FT_arity_shift) ); }; template struct tag_ice { BOOST_STATIC_CONSTANT(bool, match = RHS_bits == (LHS_bits & RHS_mask & (RHS_bits |~BOOST_FT_type_mask)) ); BOOST_STATIC_CONSTANT(bits_t, combined_bits = (LHS_bits & ~RHS_mask) | RHS_bits ); BOOST_STATIC_CONSTANT(bits_t, combined_mask = LHS_mask | RHS_mask ); BOOST_STATIC_CONSTANT(bits_t, extracted_bits = LHS_bits & RHS_mask ); }; #define BOOST_FT_mask BOOST_FT_type_mask typedef property_tag callable_builtin_tag; typedef property_tag nonmember_callable_builtin_tag; typedef property_tag function_tag; typedef property_tag reference_tag; typedef property_tag pointer_tag; typedef property_tag member_function_pointer_tag; typedef property_tag member_object_pointer_tag; typedef property_tag member_object_pointer_base; typedef property_tag member_pointer_tag; #undef BOOST_FT_mask #define BOOST_PP_VALUE BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_default_cc #include BOOST_PP_ASSIGN_SLOT(1) #define BOOST_PP_VALUE BOOST_FT_type_mask|BOOST_FT_variadic_mask|BOOST_FT_cc_mask #include BOOST_PP_ASSIGN_SLOT(2) typedef property_tag< BOOST_PP_SLOT(1) , BOOST_PP_SLOT(2) > nv_dcc_func; #define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_default_cc #include BOOST_PP_ASSIGN_SLOT(1) typedef property_tag< BOOST_PP_SLOT(1) , BOOST_PP_SLOT(2) > nv_dcc_mfp; } // namespace detail } } // namespace ::boost::function_types preprocessed.hpp000444000765000024 576112161110627 27454 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_tags // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is guarded externally // this file has been generated from the master.hpp file in the same directory namespace boost { namespace function_types { typedef detail::property_tag<0x00000200,0x00000300> non_variadic; typedef detail::property_tag<0x00000100,0x00000300> variadic; typedef detail::property_tag<0,0x00000400> non_const; typedef detail::property_tag<0x00000400,0x00000400> const_qualified; typedef detail::property_tag<0,0x00000800> non_volatile; typedef detail::property_tag<0x00000800,0x00000800> volatile_qualified; typedef detail::property_tag<0x00008000,0x00ff8000> default_cc; typedef detail::property_tag<0 , 3072> non_cv; typedef detail::property_tag<0x00000400 , 3072> const_non_volatile; typedef detail::property_tag<0x00000800, 3072> volatile_non_const; typedef detail::property_tag<3072 , 3072> cv_qualified; namespace detail { typedef constant<0x00ff0fff> full_mask; template struct encode_bits_impl { BOOST_STATIC_CONSTANT( bits_t, value = Flags | (0x00008000 * CCID) << 1 ); }; template struct encode_charr_impl { BOOST_STATIC_CONSTANT(std::size_t, value = (std::size_t)(1+ Flags | (0x00008000 * CCID) << 1 | Arity << 24 )); }; template struct decode_bits { BOOST_STATIC_CONSTANT(bits_t, flags = Bits & 0x00000fff); BOOST_STATIC_CONSTANT(bits_t, cc_id = ( (Bits & 0x00ff0fff) / 0x00008000) >> 1 ); BOOST_STATIC_CONSTANT(bits_t, tag_bits = (Bits & 0x00ff0fff)); BOOST_STATIC_CONSTANT(std::size_t, arity = (std::size_t) (Bits >> 24) ); }; template struct tag_ice { BOOST_STATIC_CONSTANT(bool, match = RHS_bits == (LHS_bits & RHS_mask & (RHS_bits | ~0x000000ff)) ); BOOST_STATIC_CONSTANT(bits_t, combined_bits = (LHS_bits & ~RHS_mask) | RHS_bits ); BOOST_STATIC_CONSTANT(bits_t, combined_mask = LHS_mask | RHS_mask ); BOOST_STATIC_CONSTANT(bits_t, extracted_bits = LHS_bits & RHS_mask ); }; typedef property_tag<0x00000001,0x000000ff> callable_builtin_tag; typedef property_tag<0x00000003,0x000000ff> nonmember_callable_builtin_tag; typedef property_tag<0x00000007,0x000000ff> function_tag; typedef property_tag<0x00000013,0x000000ff> reference_tag; typedef property_tag<0x0000000b,0x000000ff> pointer_tag; typedef property_tag<0x00000061,0x000000ff> member_function_pointer_tag; typedef property_tag<0x000000a3,0x000000ff> member_object_pointer_tag; typedef property_tag<0x000002a3,0x00ff0fff> member_object_pointer_base; typedef property_tag<0x00000020,0x000000ff> member_pointer_tag; typedef property_tag< 33287 , 16745471 > nv_dcc_func; typedef property_tag< 33377 , 16745471 > nv_dcc_mfp; } } } pp_variate_loop000755000765000024 012161110654 25625 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detailmaster.hpp000444000765000024 1221212161110654 30004 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_variate_loop // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ #ifdef __WAVE__ // this file has been generated from the master.hpp file in the same directory # pragma wave option(preserve: 0) #endif #if !defined(BOOST_FT_PREPROCESSING_MODE) # error "this file is only for two-pass preprocessing" #endif #if !defined(BOOST_PP_VALUE) # include # include # include # include BOOST_PP_EXPAND(#) define BOOST_FT_mfp 0 BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function # define BOOST_PP_VALUE \ BOOST_FT_function|BOOST_FT_non_variadic # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_function|BOOST_FT_variadic # include __FILE__ BOOST_PP_EXPAND(#) if !BOOST_FT_NO_CV_FUNC_SUPPORT # define BOOST_PP_VALUE \ BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_const # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_const # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_volatile # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_volatile # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_const|BOOST_FT_volatile # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_const|BOOST_FT_volatile # include __FILE__ BOOST_PP_EXPAND(#) endif BOOST_PP_EXPAND(#) undef BOOST_FT_syntax BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function_pointer # define BOOST_PP_VALUE \ BOOST_FT_pointer|BOOST_FT_non_variadic # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_pointer|BOOST_FT_variadic # include __FILE__ BOOST_PP_EXPAND(#) undef BOOST_FT_syntax BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function_reference # define BOOST_PP_VALUE \ BOOST_FT_reference|BOOST_FT_non_variadic # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_reference|BOOST_FT_variadic # include __FILE__ BOOST_PP_EXPAND(#) undef BOOST_FT_syntax BOOST_PP_EXPAND(#) undef BOOST_FT_mfp BOOST_PP_EXPAND(#) define BOOST_FT_mfp 1 BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_member_function_pointer # define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_non_variadic # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_variadic # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_const # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_const # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_volatile # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_volatile # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_const|BOOST_FT_volatile # include __FILE__ # define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_const|BOOST_FT_volatile # include __FILE__ BOOST_PP_EXPAND(#) undef BOOST_FT_syntax BOOST_PP_EXPAND(#) undef BOOST_FT_mfp # include #else # include BOOST_PP_ASSIGN_SLOT(1) # define BOOST_PP_VALUE BOOST_PP_SLOT(1) & BOOST_FT_kind_mask # include BOOST_PP_ASSIGN_SLOT(2) BOOST_PP_EXPAND(#) if !!(BOOST_PP_SLOT(2) & (BOOST_FT_variations)) BOOST_PP_EXPAND(#) if (BOOST_PP_SLOT(1) & (BOOST_FT_cond)) == (BOOST_FT_cond) # if ( BOOST_PP_SLOT(1) & (BOOST_FT_variadic) ) BOOST_PP_EXPAND(#) define BOOST_FT_ell ... BOOST_PP_EXPAND(#) define BOOST_FT_nullary_param # else BOOST_PP_EXPAND(#) define BOOST_FT_ell BOOST_PP_EXPAND(#) define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # endif # if !( BOOST_PP_SLOT(1) & (BOOST_FT_volatile) ) # if !( BOOST_PP_SLOT(1) & (BOOST_FT_const) ) BOOST_PP_EXPAND(#) define BOOST_FT_cv # else BOOST_PP_EXPAND(#) define BOOST_FT_cv const # endif # else # if !( BOOST_PP_SLOT(1) & (BOOST_FT_const) ) BOOST_PP_EXPAND(#) define BOOST_FT_cv volatile # else BOOST_PP_EXPAND(#) define BOOST_FT_cv const volatile # endif # endif BOOST_PP_EXPAND(#) define BOOST_FT_flags BOOST_PP_SLOT(1) BOOST_PP_EXPAND(#) include BOOST_FT_variate_file BOOST_PP_EXPAND(#) undef BOOST_FT_cv BOOST_PP_EXPAND(#) undef BOOST_FT_ell BOOST_PP_EXPAND(#) undef BOOST_FT_nullary_param BOOST_PP_EXPAND(#) undef BOOST_FT_flags BOOST_PP_EXPAND(#) endif BOOST_PP_EXPAND(#) endif #endif preprocessed.hpp000444000765000024 1770012161110615 31213 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/pp_variate_loop // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // this file has been generated from the master.hpp file in the same directory # define BOOST_FT_mfp 0 # define BOOST_FT_syntax BOOST_FT_type_function # if ! ! (4 & (BOOST_FT_variations)) # if (519 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv # define BOOST_FT_flags 519 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (4 & (BOOST_FT_variations)) # if (263 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv # define BOOST_FT_flags 263 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if !BOOST_FT_NO_CV_FUNC_SUPPORT # if ! ! (4 & (BOOST_FT_variations)) # if (1543 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv const # define BOOST_FT_flags 1543 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (4 & (BOOST_FT_variations)) # if (1287 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv const # define BOOST_FT_flags 1287 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (4 & (BOOST_FT_variations)) # if (2567 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv volatile # define BOOST_FT_flags 2567 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (4 & (BOOST_FT_variations)) # if (2311 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv volatile # define BOOST_FT_flags 2311 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (4 & (BOOST_FT_variations)) # if (3591 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv const volatile # define BOOST_FT_flags 3591 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (4 & (BOOST_FT_variations)) # if (3335 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv const volatile # define BOOST_FT_flags 3335 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # endif # undef BOOST_FT_syntax # define BOOST_FT_syntax BOOST_FT_type_function_pointer # if ! ! (8 & (BOOST_FT_variations)) # if (523 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv # define BOOST_FT_flags 523 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (8 & (BOOST_FT_variations)) # if (267 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv # define BOOST_FT_flags 267 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # undef BOOST_FT_syntax # define BOOST_FT_syntax BOOST_FT_type_function_reference # if ! ! (16 & (BOOST_FT_variations)) # if (531 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv # define BOOST_FT_flags 531 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (16 & (BOOST_FT_variations)) # if (275 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv # define BOOST_FT_flags 275 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # undef BOOST_FT_syntax # undef BOOST_FT_mfp # define BOOST_FT_mfp 1 # define BOOST_FT_syntax BOOST_FT_type_member_function_pointer # if ! ! (96 & (BOOST_FT_variations)) # if (609 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv # define BOOST_FT_flags 609 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (96 & (BOOST_FT_variations)) # if (353 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv # define BOOST_FT_flags 353 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (96 & (BOOST_FT_variations)) # if (1633 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv const # define BOOST_FT_flags 1633 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (96 & (BOOST_FT_variations)) # if (1377 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv const # define BOOST_FT_flags 1377 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (96 & (BOOST_FT_variations)) # if (2657 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv volatile # define BOOST_FT_flags 2657 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (96 & (BOOST_FT_variations)) # if (2401 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv volatile # define BOOST_FT_flags 2401 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (96 & (BOOST_FT_variations)) # if (3681 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell # define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM # define BOOST_FT_cv const volatile # define BOOST_FT_flags 3681 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # if ! ! (96 & (BOOST_FT_variations)) # if (3425 & (BOOST_FT_cond)) == (BOOST_FT_cond) # define BOOST_FT_ell ... # define BOOST_FT_nullary_param # define BOOST_FT_cv const volatile # define BOOST_FT_flags 3425 # include BOOST_FT_variate_file # undef BOOST_FT_cv # undef BOOST_FT_ell # undef BOOST_FT_nullary_param # undef BOOST_FT_flags # endif # endif # undef BOOST_FT_syntax # undef BOOST_FT_mfp synthesize_impl000755000765000024 012161110701 25661 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detailarity10_0.hpp000444000765000024 3140512161110666 30274 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,0) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (BOOST_FT_nullary_param BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 1 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,0) < typename mpl::deref< iter_0 > ::type > ::type type; }; }; template< typename R , typename T0 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,1) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 2 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,1) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,2) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 3 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,2) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,3) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 4 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,3) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,4) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 5 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,4) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,5) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 6 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,5) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,6) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 7 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,6) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,7) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 8 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,7) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,8) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 9 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,8) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,9) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 10 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,9) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,10) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 11 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,10) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity10_1.hpp000444000765000024 3107512161110622 30270 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,1) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) ( BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 2 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,1) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,2) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 3 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,2) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,3) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 4 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,3) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,4) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 5 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,4) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,5) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 6 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,5) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,6) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 7 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,6) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,7) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 8 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,7) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,8) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 9 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,8) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,9) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 10 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,9) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,10) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 11 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,10) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity20_0.hpp000444000765000024 5705412161110616 30300 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,11) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 12 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,11) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type > ::type type; }; }; template< typename R , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,12) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 13 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,12) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type > ::type type; }; }; template< typename R , typename T0 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,13) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 14 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,13) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,14) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 15 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,14) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,15) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 16 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,15) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,16) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 17 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,16) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,17) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 18 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,17) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,18) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 19 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,18) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,19) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 20 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,19) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,20) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 21 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,20) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity20_1.hpp000444000765000024 5760012161110647 30302 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,11) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 12 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,11) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type > ::type type; }; }; template< typename R , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,12) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 13 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,12) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type > ::type type; }; }; template< typename R , typename T0 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,13) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 14 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,13) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,14) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 15 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,14) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,15) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 16 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,15) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,16) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 17 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,16) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,17) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 18 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,17) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,18) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 19 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,18) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,19) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 20 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,19) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,20) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 21 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,20) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity30_0.hpp000444000765000024 10574012161110701 30310 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,21) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 22 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,21) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,22) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 23 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,22) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,23) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 24 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,23) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,24) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 25 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,24) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,25) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 26 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,25) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,26) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 27 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,26) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,27) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 28 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,27) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,28) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 29 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,28) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,29) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 30 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,29) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,30) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 31 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,30) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity30_1.hpp000444000765000024 10646412161110625 30322 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,21) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 22 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,21) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,22) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 23 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,22) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,23) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 24 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,23) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,24) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 25 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,24) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,25) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 26 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,25) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,26) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 27 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,26) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,27) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 28 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,27) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,28) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 29 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,28) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,29) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 30 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,29) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,30) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 31 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,30) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity40_0.hpp000444000765000024 13462412161110616 30321 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,31) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 32 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,31) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,32) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 33 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,32) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,33) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 34 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,33) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,34) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 35 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,34) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,35) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 36 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,35) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,36) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 37 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,36) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,37) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 38 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,37) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,38) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 39 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,38) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,39) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 40 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,39) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,40) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 41 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,40) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity40_1.hpp000444000765000024 13535012161110612 30313 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,31) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 32 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,31) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,32) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 33 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,32) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,33) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 34 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,33) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,34) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 35 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,34) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,35) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 36 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,35) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,36) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 37 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,36) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,37) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 38 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,37) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,38) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 39 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,38) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,39) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 40 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,39) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,40) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 41 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,40) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity50_0.hpp000444000765000024 16351012161110606 30315 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,41) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 42 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,41) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,42) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 43 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,42) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,43) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 44 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,43) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,44) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 45 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,44) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,45) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 46 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,45) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,46) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 47 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,46) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,47) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 48 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; typedef typename mpl::next< iter_46 > ::type iter_47; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,47) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type , typename mpl::deref< iter_47 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,48) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 49 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; typedef typename mpl::next< iter_46 > ::type iter_47; typedef typename mpl::next< iter_47 > ::type iter_48; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,48) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type , typename mpl::deref< iter_47 > ::type , typename mpl::deref< iter_48 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,49) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 50 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; typedef typename mpl::next< iter_46 > ::type iter_47; typedef typename mpl::next< iter_47 > ::type iter_48; typedef typename mpl::next< iter_48 > ::type iter_49; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,49) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type , typename mpl::deref< iter_47 > ::type , typename mpl::deref< iter_48 > ::type , typename mpl::deref< iter_49 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,50) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 , T49 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 51 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; typedef typename mpl::next< iter_46 > ::type iter_47; typedef typename mpl::next< iter_47 > ::type iter_48; typedef typename mpl::next< iter_48 > ::type iter_49; typedef typename mpl::next< iter_49 > ::type iter_50; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,50) < typename mpl::deref< iter_0 > ::type , typename mpl::deref< iter_1 > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type , typename mpl::deref< iter_47 > ::type , typename mpl::deref< iter_48 > ::type , typename mpl::deref< iter_49 > ::type , typename mpl::deref< iter_50 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl arity50_1.hpp000444000765000024 16423412161110644 30324 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion // input: BOOST_FT_syntax type macro to use // input: BOOST_FT_cc empty or cc specifier // input: BOOST_FT_ell empty or "..." // input: BOOST_FT_cv empty or cv qualifiers // input: BOOST_FT_flags single decimal integer encoding the flags // output: BOOST_FT_n number of component types (arity+1) // output: BOOST_FT_arity current arity // output: BOOST_FT_type macro that expands to the type // output: BOOST_FT_tplargs(p) template arguments with given prefix // output: BOOST_FT_params(p) parameters with given prefix # include # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,41) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 42 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,41) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,42) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 43 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,42) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,43) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 44 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,43) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,44) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 45 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,44) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,45) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 46 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,45) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,46) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 47 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,46) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,47) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 48 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; typedef typename mpl::next< iter_46 > ::type iter_47; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,47) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type , typename mpl::deref< iter_47 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,48) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 49 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; typedef typename mpl::next< iter_46 > ::type iter_47; typedef typename mpl::next< iter_47 > ::type iter_48; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,48) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type , typename mpl::deref< iter_47 > ::type , typename mpl::deref< iter_48 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,49) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 50 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; typedef typename mpl::next< iter_46 > ::type iter_47; typedef typename mpl::next< iter_47 > ::type iter_48; typedef typename mpl::next< iter_48 > ::type iter_49; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,49) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type , typename mpl::deref< iter_47 > ::type , typename mpl::deref< iter_48 > ::type , typename mpl::deref< iter_49 > ::type > ::type type; }; }; template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , 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 BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,50) { typedef BOOST_FT_syntax(BOOST_FT_cc,type BOOST_PP_EMPTY) (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 BOOST_FT_ell) BOOST_FT_cv ; }; template< > struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, 51 > { template struct synthesize_impl_i { private: typedef typename mpl::begin ::type iter_0; typedef typename mpl::next< iter_0 > ::type iter_1; typedef typename mpl::next< iter_1 > ::type iter_2; typedef typename mpl::next< iter_2 > ::type iter_3; typedef typename mpl::next< iter_3 > ::type iter_4; typedef typename mpl::next< iter_4 > ::type iter_5; typedef typename mpl::next< iter_5 > ::type iter_6; typedef typename mpl::next< iter_6 > ::type iter_7; typedef typename mpl::next< iter_7 > ::type iter_8; typedef typename mpl::next< iter_8 > ::type iter_9; typedef typename mpl::next< iter_9 > ::type iter_10; typedef typename mpl::next< iter_10 > ::type iter_11; typedef typename mpl::next< iter_11 > ::type iter_12; typedef typename mpl::next< iter_12 > ::type iter_13; typedef typename mpl::next< iter_13 > ::type iter_14; typedef typename mpl::next< iter_14 > ::type iter_15; typedef typename mpl::next< iter_15 > ::type iter_16; typedef typename mpl::next< iter_16 > ::type iter_17; typedef typename mpl::next< iter_17 > ::type iter_18; typedef typename mpl::next< iter_18 > ::type iter_19; typedef typename mpl::next< iter_19 > ::type iter_20; typedef typename mpl::next< iter_20 > ::type iter_21; typedef typename mpl::next< iter_21 > ::type iter_22; typedef typename mpl::next< iter_22 > ::type iter_23; typedef typename mpl::next< iter_23 > ::type iter_24; typedef typename mpl::next< iter_24 > ::type iter_25; typedef typename mpl::next< iter_25 > ::type iter_26; typedef typename mpl::next< iter_26 > ::type iter_27; typedef typename mpl::next< iter_27 > ::type iter_28; typedef typename mpl::next< iter_28 > ::type iter_29; typedef typename mpl::next< iter_29 > ::type iter_30; typedef typename mpl::next< iter_30 > ::type iter_31; typedef typename mpl::next< iter_31 > ::type iter_32; typedef typename mpl::next< iter_32 > ::type iter_33; typedef typename mpl::next< iter_33 > ::type iter_34; typedef typename mpl::next< iter_34 > ::type iter_35; typedef typename mpl::next< iter_35 > ::type iter_36; typedef typename mpl::next< iter_36 > ::type iter_37; typedef typename mpl::next< iter_37 > ::type iter_38; typedef typename mpl::next< iter_38 > ::type iter_39; typedef typename mpl::next< iter_39 > ::type iter_40; typedef typename mpl::next< iter_40 > ::type iter_41; typedef typename mpl::next< iter_41 > ::type iter_42; typedef typename mpl::next< iter_42 > ::type iter_43; typedef typename mpl::next< iter_43 > ::type iter_44; typedef typename mpl::next< iter_44 > ::type iter_45; typedef typename mpl::next< iter_45 > ::type iter_46; typedef typename mpl::next< iter_46 > ::type iter_47; typedef typename mpl::next< iter_47 > ::type iter_48; typedef typename mpl::next< iter_48 > ::type iter_49; typedef typename mpl::next< iter_49 > ::type iter_50; public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,50) < typename mpl::deref< iter_0 > ::type , typename detail::cv_traits< typename mpl::deref< iter_1 > ::type > ::type , typename mpl::deref< iter_2 > ::type , typename mpl::deref< iter_3 > ::type , typename mpl::deref< iter_4 > ::type , typename mpl::deref< iter_5 > ::type , typename mpl::deref< iter_6 > ::type , typename mpl::deref< iter_7 > ::type , typename mpl::deref< iter_8 > ::type , typename mpl::deref< iter_9 > ::type , typename mpl::deref< iter_10 > ::type , typename mpl::deref< iter_11 > ::type , typename mpl::deref< iter_12 > ::type , typename mpl::deref< iter_13 > ::type , typename mpl::deref< iter_14 > ::type , typename mpl::deref< iter_15 > ::type , typename mpl::deref< iter_16 > ::type , typename mpl::deref< iter_17 > ::type , typename mpl::deref< iter_18 > ::type , typename mpl::deref< iter_19 > ::type , typename mpl::deref< iter_20 > ::type , typename mpl::deref< iter_21 > ::type , typename mpl::deref< iter_22 > ::type , typename mpl::deref< iter_23 > ::type , typename mpl::deref< iter_24 > ::type , typename mpl::deref< iter_25 > ::type , typename mpl::deref< iter_26 > ::type , typename mpl::deref< iter_27 > ::type , typename mpl::deref< iter_28 > ::type , typename mpl::deref< iter_29 > ::type , typename mpl::deref< iter_30 > ::type , typename mpl::deref< iter_31 > ::type , typename mpl::deref< iter_32 > ::type , typename mpl::deref< iter_33 > ::type , typename mpl::deref< iter_34 > ::type , typename mpl::deref< iter_35 > ::type , typename mpl::deref< iter_36 > ::type , typename mpl::deref< iter_37 > ::type , typename mpl::deref< iter_38 > ::type , typename mpl::deref< iter_39 > ::type , typename mpl::deref< iter_40 > ::type , typename mpl::deref< iter_41 > ::type , typename mpl::deref< iter_42 > ::type , typename mpl::deref< iter_43 > ::type , typename mpl::deref< iter_44 > ::type , typename mpl::deref< iter_45 > ::type , typename mpl::deref< iter_46 > ::type , typename mpl::deref< iter_47 > ::type , typename mpl::deref< iter_48 > ::type , typename mpl::deref< iter_49 > ::type , typename mpl::deref< iter_50 > ::type > ::type type; }; }; # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl master.hpp000444000765000024 564512161110654 30043 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/function_types/detail/synthesize_impl // (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is intended for multiple inclusion #if BOOST_FT_ARITY_LOOP_PREFIX # ifndef BOOST_FT_DETAIL_SYNTHESIZE_IMPL_MASTER_HPP_INCLUDED # define BOOST_FT_DETAIL_SYNTHESIZE_IMPL_MASTER_HPP_INCLUDED # include # include # include # include # include # endif # define BOOST_FT_type_name type # ifdef BOOST_FT_flags # define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) # define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity # else BOOST_PP_EXPAND(#) define BOOST_FT_make_type(flags,cc,arity) BOOST_FT_make_type_impl(flags,cc,arity) BOOST_PP_EXPAND(#) define BOOST_FT_make_type_impl(flags,cc,arity) make_type_ ## flags ## _ ## cc ## _ ## arity # endif # define BOOST_FT_iter(i) BOOST_PP_CAT(iter_,i) #elif BOOST_FT_ARITY_LOOP_IS_ITERATING template< BOOST_FT_tplargs(BOOST_PP_IDENTITY(typename)) > struct BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,BOOST_FT_arity) { typedef BOOST_FT_type ; }; template<> struct synthesize_impl_o< BOOST_FT_flags, BOOST_FT_cc_id, BOOST_FT_n > { template struct synthesize_impl_i { private: typedef typename mpl::begin::type BOOST_FT_iter(0); # if BOOST_FT_n > 1 # define BOOST_PP_LOCAL_MACRO(i) typedef typename mpl::next< \ BOOST_FT_iter(BOOST_PP_DEC(i)) >::type BOOST_FT_iter(i); # define BOOST_PP_LOCAL_LIMITS (1,BOOST_FT_n-1) # include BOOST_PP_LOCAL_ITERATE() # endif public: typedef typename detail::BOOST_FT_make_type(BOOST_FT_flags,BOOST_FT_cc_id,BOOST_FT_arity) < typename mpl::deref< BOOST_FT_iter(0) >::type # if BOOST_FT_mfp , typename detail::cv_traits< typename mpl::deref< BOOST_FT_iter(1) >::type >::type # endif # if BOOST_FT_n > (BOOST_FT_mfp+1) # define BOOST_PP_LOCAL_LIMITS (BOOST_FT_mfp+1,BOOST_FT_n-1) # define BOOST_PP_LOCAL_MACRO(i) \ , typename mpl::deref< BOOST_FT_iter(i) >::type # include BOOST_PP_LOCAL_ITERATE() # endif >::type type; }; }; #elif BOOST_FT_ARITY_LOOP_SUFFIX # ifdef BOOST_FT_flags # undef BOOST_FT_make_type # undef BOOST_FT_make_type_impl # else BOOST_PP_EXPAND(#) undef BOOST_FT_make_type BOOST_PP_EXPAND(#) undef BOOST_FT_make_type_impl # endif # undef BOOST_FT_iter # undef BOOST_FT_type_name #else # error "attempt to use arity loop master file without loop" #endif functional000755000765000024 012161110655 20272 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boosthash.hpp000444000765000024 36212161110615 22040 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional // 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 hash_fwd.hpp000444000765000024 36612161110655 22710 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional // 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 hash000755000765000024 012161110660 21211 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functionalextensions.hpp000444000765000024 2573612161110650 24312 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional/hash // 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 #include #include #include #include #if !defined(BOOST_NO_CXX11_HDR_ARRAY) # include #endif #if !defined(BOOST_NO_CXX11_HDR_TUPLE) # include #endif #if !defined(BOOST_NO_CXX11_HDR_MEMORY) # include #endif #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; boost::hash_combine(seed, v.first); boost::hash_combine(seed, v.second); return seed; } template std::size_t hash_value(std::vector const& v) { return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::list const& v) { return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::deque const& v) { return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::set const& v) { return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::multiset const& v) { return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::map const& v) { return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::multimap const& v) { return boost::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; } #if !defined(BOOST_NO_CXX11_HDR_ARRAY) template std::size_t hash_value(std::array const& v) { return boost::hash_range(v.begin(), v.end()); } #endif #if !defined(BOOST_NO_CXX11_HDR_TUPLE) namespace hash_detail { template inline typename boost::enable_if_c<(I == std::tuple_size::value), void>::type hash_combine_tuple(std::size_t&, T const&) { } template inline typename boost::enable_if_c<(I < std::tuple_size::value), void>::type hash_combine_tuple(std::size_t& seed, T const& v) { boost::hash_combine(seed, std::get(v)); boost::hash_detail::hash_combine_tuple(seed, v); } template inline std::size_t hash_tuple(T const& v) { std::size_t seed = 0; boost::hash_detail::hash_combine_tuple<0>(seed, v); return seed; } } #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template inline std::size_t hash_value(std::tuple const& v) { return boost::hash_detail::hash_tuple(v); } #else inline std::size_t hash_value(std::tuple<> const& v) { return boost::hash_detail::hash_tuple(v); } # define BOOST_HASH_TUPLE_F(z, n, _) \ template< \ BOOST_PP_ENUM_PARAMS_Z(z, n, typename A) \ > \ inline std::size_t hash_value(std::tuple< \ BOOST_PP_ENUM_PARAMS_Z(z, n, A) \ > const& v) \ { \ return boost::hash_detail::hash_tuple(v); \ } BOOST_PP_REPEAT_FROM_TO(1, 11, BOOST_HASH_TUPLE_F, _) # undef BOOST_HASH_TUPLE_F #endif #endif #if !defined(BOOST_NO_CXX11_SMART_PTR) template inline std::size_t hash_value(std::shared_ptr const& x) { return boost::hash_value(x.get()); } template inline std::size_t hash_value(std::unique_ptr const& x) { return boost::hash_value(x.get()); } #endif // // 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 hash.hpp000444000765000024 3776212161110660 23041 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional/hash // 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 #include #include #include #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) #include #endif #if !defined(BOOST_NO_CXX11_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 { namespace hash_detail { struct enable_hash_value { typedef std::size_t type; }; template struct basic_numbers {}; template struct long_numbers; template struct ulong_numbers; template struct float_numbers {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) template <> struct basic_numbers : boost::hash_detail::enable_hash_value {}; #endif // long_numbers is defined like this to allow for separate // specialization for long_long and int128_type, in case // they conflict. template struct long_numbers2 {}; template struct ulong_numbers2 {}; template struct long_numbers : long_numbers2 {}; template struct ulong_numbers : ulong_numbers2 {}; #if !defined(BOOST_NO_LONG_LONG) template <> struct long_numbers : boost::hash_detail::enable_hash_value {}; template <> struct ulong_numbers : boost::hash_detail::enable_hash_value {}; #endif #if defined(BOOST_HAS_INT128) template <> struct long_numbers2 : boost::hash_detail::enable_hash_value {}; template <> struct ulong_numbers2 : boost::hash_detail::enable_hash_value {}; #endif template <> struct float_numbers : boost::hash_detail::enable_hash_value {}; template <> struct float_numbers : boost::hash_detail::enable_hash_value {}; template <> struct float_numbers : boost::hash_detail::enable_hash_value {}; } template typename boost::hash_detail::basic_numbers::type hash_value(T); template typename boost::hash_detail::long_numbers::type hash_value(T); template typename boost::hash_detail::ulong_numbers::type hash_value(T); template typename boost::enable_if, std::size_t>::type hash_value(T); #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 template std::size_t hash_value( std::basic_string, A> const&); template typename boost::hash_detail::float_numbers::type hash_value(T); #if !defined(BOOST_NO_CXX11_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; } } template typename boost::hash_detail::basic_numbers::type hash_value(T v) { return static_cast(v); } template typename boost::hash_detail::long_numbers::type hash_value(T v) { return hash_detail::hash_value_signed(v); } template typename boost::hash_detail::ulong_numbers::type hash_value(T v) { return hash_detail::hash_value_unsigned(v); } template typename boost::enable_if, std::size_t>::type hash_value(T v) { return static_cast(v); } // 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()); } template typename boost::hash_detail::float_numbers::type hash_value(T v) { return boost::hash_detail::float_hash_value(v); } #if !defined(BOOST_NO_CXX11_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_HAS_INT128) BOOST_HASH_SPECIALIZE(boost::int128_type) BOOST_HASH_SPECIALIZE(boost::uint128_type) #endif #if !defined(BOOST_NO_CXX11_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 hash_fwd.hpp000444000765000024 222112161110601 23632 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional/hash // 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 detail000755000765000024 012161110702 22450 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional/hashfloat_functions.hpp000444000765000024 3331512161110702 26540 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional/hash/detail // 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 // Set BOOST_HASH_CONFORMANT_FLOATS to 1 for libraries known to have // sufficiently good floating point support to not require any // workarounds. // // When set to 0, the library tries to automatically // use the best available implementation. This normally works well, but // breaks when ambiguities are created by odd namespacing of the functions. // // Note that if this is set to 0, the library should still take full // advantage of the platform's floating point support. #if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) # define BOOST_HASH_CONFORMANT_FLOATS 0 #elif defined(__LIBCOMO__) # define BOOST_HASH_CONFORMANT_FLOATS 0 #elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) // Rogue Wave library: # define BOOST_HASH_CONFORMANT_FLOATS 0 #elif defined(_LIBCPP_VERSION) // libc++ # define BOOST_HASH_CONFORMANT_FLOATS 1 #elif defined(__GLIBCPP__) || defined(__GLIBCXX__) // GNU libstdc++ 3 # if defined(__GNUC__) && __GNUC__ >= 4 # define BOOST_HASH_CONFORMANT_FLOATS 1 # else # define BOOST_HASH_CONFORMANT_FLOATS 0 # endif #elif defined(__STL_CONFIG_H) // generic SGI STL # define BOOST_HASH_CONFORMANT_FLOATS 0 #elif defined(__MSL_CPP__) // MSL standard lib: # define BOOST_HASH_CONFORMANT_FLOATS 0 #elif defined(__IBMCPP__) // VACPP std lib (probably conformant for much earlier version). # if __IBMCPP__ >= 1210 # define BOOST_HASH_CONFORMANT_FLOATS 1 # else # define BOOST_HASH_CONFORMANT_FLOATS 0 # endif #elif defined(MSIPL_COMPILE_H) // Modena C++ standard library # define BOOST_HASH_CONFORMANT_FLOATS 0 #elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) // Dinkumware Library (this has to appear after any possible replacement libraries): # if _CPPLIB_VER >= 405 # define BOOST_HASH_CONFORMANT_FLOATS 1 # else # define BOOST_HASH_CONFORMANT_FLOATS 0 # endif #else # define BOOST_HASH_CONFORMANT_FLOATS 0 #endif #if BOOST_HASH_CONFORMANT_FLOATS // The standard library is known to be compliant, so don't use the // configuration mechanism. namespace boost { namespace hash_detail { template struct call_ldexp { typedef Float float_type; inline Float operator()(Float x, int y) const { return std::ldexp(x, y); } }; template struct call_frexp { typedef Float float_type; inline Float operator()(Float x, int* y) const { return std::frexp(x, y); } }; template struct select_hash_type { typedef Float type; }; } } #else // BOOST_HASH_CONFORMANT_FLOATS == 0 // 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 // BOOST_HASH_CONFORMANT_FLOATS #endif hash_float.hpp000444000765000024 2065012161110657 25462 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional/hash/detail // Copyright 2005-2012 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 #include #include #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 // 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 namespace boost { namespace hash_detail { inline void hash_float_combine(std::size_t& seed, std::size_t value) { seed ^= value + (seed<<6) + (seed>>2); } //////////////////////////////////////////////////////////////////////// // Binary hash function // // Only used for floats with known iec559 floats, and certain values in // numeric_limits inline std::size_t hash_binary(char* ptr, std::size_t length) { std::size_t seed = 0; if (length >= sizeof(std::size_t)) { seed = *(std::size_t*) ptr; length -= sizeof(std::size_t); ptr += sizeof(std::size_t); while(length >= sizeof(std::size_t)) { std::size_t buffer = 0; std::memcpy(&buffer, ptr, sizeof(std::size_t)); hash_float_combine(seed, buffer); length -= sizeof(std::size_t); ptr += sizeof(std::size_t); } } if (length > 0) { std::size_t buffer = 0; std::memcpy(&buffer, ptr, length); hash_float_combine(seed, buffer); } return seed; } template inline std::size_t float_hash_impl(Float v, BOOST_DEDUCED_TYPENAME boost::enable_if_c< std::numeric_limits::is_iec559 && std::numeric_limits::digits == 24 && std::numeric_limits::radix == 2 && std::numeric_limits::max_exponent == 128, int>::type ) { return hash_binary((char*) &v, 4); } template inline std::size_t float_hash_impl(Float v, BOOST_DEDUCED_TYPENAME boost::enable_if_c< std::numeric_limits::is_iec559 && std::numeric_limits::digits == 53 && std::numeric_limits::radix == 2 && std::numeric_limits::max_exponent == 1024, int>::type ) { return hash_binary((char*) &v, 8); } template inline std::size_t float_hash_impl(Float v, BOOST_DEDUCED_TYPENAME boost::enable_if_c< std::numeric_limits::is_iec559 && std::numeric_limits::digits == 64 && std::numeric_limits::radix == 2 && std::numeric_limits::max_exponent == 16384, int>::type ) { return hash_binary((char*) &v, 10); } template inline std::size_t float_hash_impl(Float v, BOOST_DEDUCED_TYPENAME boost::enable_if_c< std::numeric_limits::is_iec559 && std::numeric_limits::digits == 113 && std::numeric_limits::radix == 2 && std::numeric_limits::max_exponent == 16384, int>::type ) { return hash_binary((char*) &v, 16); } //////////////////////////////////////////////////////////////////////// // Portable hash function // // Used as a fallback when the binary hash function isn't supported. 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; } #if !defined(BOOST_HASH_DETAIL_TEST_WITHOUT_GENERIC) 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)); } #endif } } #if BOOST_HASH_USE_FPCLASSIFY #include namespace boost { namespace hash_detail { template inline std::size_t float_hash_value(T v) { #if defined(fpclassify) switch (fpclassify(v)) #elif BOOST_HASH_CONFORMANT_FLOATS switch (std::fpclassify(v)) #else using namespace std; switch (fpclassify(v)) #endif { 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, 0); default: BOOST_ASSERT(0); return 0; } } } } #else // !BOOST_HASH_USE_FPCLASSIFY namespace boost { namespace hash_detail { template inline bool is_zero(T v) { #if !defined(__GNUC__) return v == 0; #else // GCC's '-Wfloat-equal' will complain about comparing // v to 0, but because it disables warnings for system // headers it won't complain if you use std::equal_to to // compare with 0. Resulting in this silliness: return std::equal_to()(v, 0); #endif } template inline std::size_t float_hash_value(T v) { return boost::hash_detail::is_zero(v) ? 0 : float_hash_impl(v, 0); } } } #endif // BOOST_HASH_USE_FPCLASSIFY #undef BOOST_HASH_USE_FPCLASSIFY #if defined(BOOST_MSVC) #pragma warning(pop) #endif #endif limits.hpp000444000765000024 330612161110611 24620 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/functional/hash/detail // 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 fusion000755000765000024 012161110670 17430 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostmpl.hpp000444000765000024 235412161110665 21076 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_MPL_09172006_2049) #define FUSION_MPL_09172006_2049 // The fusion <--> MPL link headers #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif tuple.hpp000444000765000024 120612161110670 21426 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_TUPLE_10032005_0806) #define FUSION_TUPLE_10032005_0806 #include #include #include #include #endif adapted000755000765000024 012161110612 21026 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusionmpl.hpp000444000765000024 212412161110612 22463 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_MPL_31122005_1152) #define BOOST_FUSION_MPL_31122005_1152 #include #include #include #include #include #include #include #include #include #include #endif std_pair.hpp000444000765000024 132612161110603 23503 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STD_PAIR_HPP #define BOOST_FUSION_ADAPTED_STD_PAIR_HPP #include #include BOOST_FUSION_ADAPT_TPL_STRUCT( (T1)(T2),(std::pair)(T1)(T2),(T1, first)(T2, second)) #endif mpl000755000765000024 012161110611 21615 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adaptedmpl_iterator.hpp000444000765000024 616612161110611 25175 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_MPL_ITERATOR_05052005_0731) #define FUSION_MPL_ITERATOR_05052005_0731 #include #include #include #include #include #include #include #include namespace boost { namespace fusion { template struct mpl_iterator : iterator_facade< mpl_iterator , typename detail::mpl_iterator_category::type > { typedef typename remove_const::type iterator_type; template struct value_of : mpl::deref {}; template struct deref { typedef typename mpl::deref< typename Iterator::iterator_type>::type type; static type call(Iterator) { return type(); } }; template struct next { typedef mpl_iterator< typename mpl::next::type> type; static type call(Iterator) { return type(); } }; template struct prior { typedef mpl_iterator< typename mpl::prior::type> type; static type call(Iterator) { return type(); } }; template struct advance { typedef mpl_iterator< typename mpl::advance::type> type; static type call(Iterator const& /*i*/) { return type(); } }; template struct distance : mpl::distance< typename I1::iterator_type , typename I2::iterator_type> { typedef typename mpl::distance< typename I1::iterator_type , typename I2::iterator_type >::type type; static type call(I1 const&, I2 const&) { return type(); } }; }; }} #endif detail000755000765000024 012161110654 23066 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mplat_impl.hpp000444000765000024 216012161110654 25360 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_AT_IMPL_31122005_1642) #define BOOST_FUSION_AT_IMPL_31122005_1642 #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct at_impl; template <> struct at_impl { template struct apply { typedef typename mpl::at::type type; static type call(Sequence) { return type(); } }; }; } }} #endif begin_impl.hpp000444000765000024 253512161110600 26035 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_BEGIN_IMPL_31122005_1209) #define BOOST_FUSION_BEGIN_IMPL_31122005_1209 #include #include #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct begin_impl; template <> struct begin_impl { template struct apply { typedef typename mpl::begin< typename remove_const::type >::type iterator; typedef mpl_iterator type; static type call(Sequence) { return type(); } }; }; } }} #endif category_of_impl.hpp000444000765000024 316312161110610 27251 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141) #define BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141 #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct mpl_sequence_category_of { // assumes T is an mpl sequence // there should be no way this will ever be // called where T is an mpl iterator BOOST_STATIC_ASSERT(mpl::is_sequence::value); typedef typename mpl_iterator_category< typename mpl::begin::type::category >::type type; }; } struct mpl_sequence_tag; namespace extension { template struct category_of_impl; template<> struct category_of_impl { template struct apply : detail::mpl_sequence_category_of {}; }; } }} #endif empty_impl.hpp000444000765000024 162712161110602 26112 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_EMPTY_IMPL_31122005_1554) #define BOOST_FUSION_EMPTY_IMPL_31122005_1554 #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct empty_impl; template <> struct empty_impl { template struct apply : mpl::empty {}; }; } }} #endif end_impl.hpp000444000765000024 251012161110603 25513 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_END_IMPL_31122005_1237) #define BOOST_FUSION_END_IMPL_31122005_1237 #include #include #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct end_impl; template <> struct end_impl { template struct apply { typedef typename mpl::end< typename remove_const::type >::type iterator; typedef mpl_iterator type; static type call(Sequence) { return type(); } }; }; } }} #endif has_key_impl.hpp000444000765000024 166312161110615 26403 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_HAS_KEY_IMPL_31122005_1647) #define BOOST_FUSION_HAS_KEY_IMPL_31122005_1647 #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct has_key_impl; template <> struct has_key_impl { template struct apply : mpl::has_key {}; }; } }} #endif is_sequence_impl.hpp000444000765000024 162612161110646 27266 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505) #define BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505 #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct is_sequence_impl; template<> struct is_sequence_impl { template struct apply : mpl::true_ {}; }; } }} #endif is_view_impl.hpp000444000765000024 162412161110627 26425 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_IS_VIEW_IMPL_03202006_0048) #define BOOST_FUSION_IS_VIEW_IMPL_03202006_0048 #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct is_view_impl; template<> struct is_view_impl { template struct apply : mpl::true_ {}; }; } }} #endif size_impl.hpp000444000765000024 161512161110617 25731 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SIZE_IMPL_31122005_1508) #define BOOST_FUSION_SIZE_IMPL_31122005_1508 #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct size_impl; template <> struct size_impl { template struct apply : mpl::size {}; }; } }} #endif value_at_impl.hpp000444000765000024 165112161110637 26561 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_VALUE_AT_IMPL_31122005_1621) #define BOOST_FUSION_VALUE_AT_IMPL_31122005_1621 #include namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { template struct value_at_impl; template <> struct value_at_impl { template struct apply : mpl::at {}; }; } }} #endif struct000755000765000024 012161110651 22355 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adaptedadapt_struct.hpp000444000765000024 1000612161110646 25741 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Copyright (c) 2009-2011 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP #define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BOOST_FUSION_ADAPT_STRUCT_FILLER_0(X, Y) \ ((X, Y)) BOOST_FUSION_ADAPT_STRUCT_FILLER_1 #define BOOST_FUSION_ADAPT_STRUCT_FILLER_1(X, Y) \ ((X, Y)) BOOST_FUSION_ADAPT_STRUCT_FILLER_0 #define BOOST_FUSION_ADAPT_STRUCT_FILLER_0_END #define BOOST_FUSION_ADAPT_STRUCT_FILLER_1_END #define BOOST_FUSION_ADAPT_STRUCT_C(TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE)\ BOOST_FUSION_ADAPT_STRUCT_C_BASE( \ TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,BOOST_PP_EMPTY,ATTRIBUTE,2) #define BOOST_FUSION_ADAPT_TPL_STRUCT(TEMPLATE_PARAMS_SEQ,NAME_SEQ, ATTRIBUTES) \ BOOST_FUSION_ADAPT_STRUCT_BASE( \ (1)TEMPLATE_PARAMS_SEQ, \ (1)NAME_SEQ, \ struct_tag, \ 0, \ ((0,0)) BOOST_PP_CAT( \ BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_STRUCT_C) #define BOOST_FUSION_ADAPT_STRUCT(NAME, ATTRIBUTES) \ BOOST_FUSION_ADAPT_STRUCT_BASE( \ (0), \ (0)(NAME), \ struct_tag, \ 0, \ BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_STRUCT_C) #define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(NAME, ATTRIBUTES) \ BOOST_FUSION_ADAPT_STRUCT_BASE( \ (0), \ (0)(NAME), \ struct_tag, \ 1, \ BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_STRUCT_C) #endif adapt_struct_named.hpp000444000765000024 422412161110651 27066 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Copyright (c) 2009-2010 Hartmut Kaiser Copyright (c) 2010-2011 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_NAMED_HPP #define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_NAMED_HPP #include #include #include #define BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0(X, Y) \ (X, obj.Y) BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_1 #define BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_1(X, Y) \ (X, obj.Y) BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0 #define BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0_END #define BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_1_END #define BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \ WRAPPED_TYPE, NAMESPACE_SEQ, NAME, ATTRIBUTES) \ \ BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \ WRAPPED_TYPE,(0)NAMESPACE_SEQ,NAME) \ \ BOOST_FUSION_ADAPT_STRUCT_AS_VIEW( \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME, \ BOOST_PP_CAT( \ BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0 ATTRIBUTES,_END)) #define BOOST_FUSION_ADAPT_STRUCT_NAMED(WRAPPED_TYPE, NAME, ATTRIBUTES) \ BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \ WRAPPED_TYPE,(boost)(fusion)(adapted),NAME,ATTRIBUTES) #endif detail000755000765000024 012161110677 23627 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/structadapt_base.hpp000444000765000024 4136212161110653 26600 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2009 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2011 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_BASE_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_BASE_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME_TEMPLATE_PARAMS(SEQ) \ BOOST_PP_SEQ_HEAD(SEQ) \ BOOST_PP_EMPTY() #define BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(SEQ) \ BOOST_PP_IF( \ BOOST_PP_SEQ_HEAD(SEQ), \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME_TEMPLATE_PARAMS, \ BOOST_PP_SEQ_HEAD)(BOOST_PP_SEQ_TAIL(SEQ)) #define BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL_C(R, _, ELEM) \ (typename ELEM) #define BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL(SEQ) \ BOOST_PP_SEQ_ENUM( \ BOOST_PP_SEQ_FOR_EACH( \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL_C, \ _, \ BOOST_PP_SEQ_TAIL(SEQ))) #define BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(SEQ) \ BOOST_PP_IF( \ BOOST_PP_SEQ_HEAD(SEQ), \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL, \ BOOST_PP_TUPLE_EAT(1))(SEQ) #ifdef BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS # define BOOST_FUSION_ADAPT_STRUCT_TAG_OF_SPECIALIZATION( \ MODIFIER, TEMPLATE_PARAMS_SEQ, NAME_SEQ, TAG) \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \ > \ struct tag_of< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) MODIFIER \ , void \ > \ { \ typedef TAG type; \ }; #else # define BOOST_FUSION_ADAPT_STRUCT_TAG_OF_SPECIALIZATION( \ MODIFIER, TEMPLATE_PARAMS_SEQ, NAME_SEQ, TAG) \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \ > \ struct tag_of \ { \ typedef TAG type; \ }; #endif #define BOOST_FUSION_ADAPT_STRUCT_BASE_UNPACK_AND_CALL(R,DATA,I,ATTRIBUTE) \ BOOST_PP_TUPLE_ELEM(3,0,DATA)( \ BOOST_PP_TUPLE_ELEM(3,1,DATA), \ BOOST_PP_TUPLE_ELEM(3,2,DATA), \ I, \ ATTRIBUTE) #ifdef BOOST_MSVC # define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM(R,_,ELEM) \ typedef ELEM ELEM; # define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL(SEQ) \ BOOST_PP_SEQ_FOR_EACH( \ BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAM, \ _, \ BOOST_PP_SEQ_TAIL(SEQ)) # define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS(SEQ) \ BOOST_PP_IF( \ BOOST_PP_SEQ_HEAD(SEQ), \ BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS_IMPL, \ BOOST_PP_TUPLE_EAT(1))(SEQ) #else # define BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS(SEQ) #endif #define BOOST_FUSION_ADAPT_STRUCT_C_BASE( \ TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,PREFIX,ATTRIBUTE,ATTRIBUTE_TUPEL_SIZE) \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \ > \ struct access::struct_member< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \ , I \ > \ { \ typedef \ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) \ attribute_type; \ BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \ TEMPLATE_PARAMS_SEQ) \ \ typedef attribute_type type; \ \ template \ struct apply \ { \ typedef typename \ add_reference< \ typename mpl::eval_if< \ is_const \ , add_const \ , mpl::identity \ >::type \ >::type \ type; \ \ static type \ call(Seq& seq) \ { \ return seq.PREFIX() \ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE); \ } \ }; \ }; \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \ > \ struct struct_member_name< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \ , I \ > \ { \ typedef char const* type; \ \ static type \ call() \ { \ return BOOST_PP_STRINGIZE( \ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)); \ } \ }; #define BOOST_FUSION_ADAPT_STRUCT_BASE( \ TEMPLATE_PARAMS_SEQ, \ NAME_SEQ, \ TAG, \ IS_VIEW, \ ATTRIBUTES_SEQ, \ ATTRIBUTES_CALLBACK) \ \ namespace boost \ { \ namespace fusion \ { \ namespace traits \ { \ BOOST_FUSION_ADAPT_STRUCT_TAG_OF_SPECIALIZATION( \ BOOST_PP_EMPTY(), TEMPLATE_PARAMS_SEQ, NAME_SEQ, TAG) \ BOOST_FUSION_ADAPT_STRUCT_TAG_OF_SPECIALIZATION( \ const, TEMPLATE_PARAMS_SEQ, NAME_SEQ, TAG) \ } \ \ namespace extension \ { \ BOOST_PP_IF( \ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \ BOOST_PP_SEQ_FOR_EACH_I_R, \ BOOST_PP_TUPLE_EAT(4))( \ 1, \ BOOST_FUSION_ADAPT_STRUCT_BASE_UNPACK_AND_CALL, \ (ATTRIBUTES_CALLBACK,TEMPLATE_PARAMS_SEQ,NAME_SEQ), \ BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ)) \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS( \ TEMPLATE_PARAMS_SEQ) \ > \ struct struct_size \ : mpl::int_ \ {}; \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS( \ TEMPLATE_PARAMS_SEQ) \ > \ struct struct_is_view< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \ > \ : mpl::BOOST_PP_IF(IS_VIEW,true_,false_) \ {}; \ } \ } \ \ namespace mpl \ { \ template \ struct sequence_tag; \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS( \ TEMPLATE_PARAMS_SEQ) \ > \ struct sequence_tag \ { \ typedef fusion::fusion_sequence_tag type; \ }; \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS( \ TEMPLATE_PARAMS_SEQ) \ > \ struct sequence_tag< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const \ > \ { \ typedef fusion::fusion_sequence_tag type; \ }; \ } \ } #endif at_impl.hpp000444000765000024 213212161110612 26105 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_AT_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_AT_IMPL_HPP #include namespace boost { namespace fusion { namespace extension { template struct at_impl; template <> struct at_impl { template struct apply : access::struct_member< typename remove_const::type , N::value >::template apply {}; }; template <> struct at_impl : at_impl {}; }}} #endif begin_impl.hpp000444000765000024 333312161110613 26572 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_BEGIN_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_BEGIN_IMPL_HPP #include namespace boost { namespace fusion { namespace extension { template struct begin_impl; template <> struct begin_impl { template struct apply { typedef basic_iterator< struct_iterator_tag , random_access_traversal_tag , Seq , 0 > type; static type call(Seq& seq) { return type(seq,0); } }; }; template <> struct begin_impl { template struct apply { typedef basic_iterator< struct_iterator_tag , assoc_struct_category , Seq , 0 > type; static type call(Seq& seq) { return type(seq,0); } }; }; }}} #endif category_of_impl.hpp000444000765000024 231412161110607 30010 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_CATEGORY_OF_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_CATEGORY_OF_IMPL_HPP namespace boost { namespace fusion { namespace extension { template struct category_of_impl; template<> struct category_of_impl { template struct apply { typedef random_access_traversal_tag type; }; }; template<> struct category_of_impl { template struct apply { typedef assoc_struct_category type; }; }; } }} #endif deref_impl.hpp000444000765000024 227512161110626 26603 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEREF_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEREF_IMPL_HPP namespace boost { namespace fusion { namespace extension { template struct deref_impl; template <> struct deref_impl { template struct apply { typedef typename access::struct_member< typename remove_const::type , It::index::value >::template apply impl; typedef typename impl::type type; static type call(It const& it) { return impl::call(*it.seq); } }; }; }}} #endif end_impl.hpp000444000765000024 347012161110677 26270 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_END_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_END_IMPL_HPP #include namespace boost { namespace fusion { namespace extension { template struct end_impl; template <> struct end_impl { template struct apply { typedef basic_iterator< struct_iterator_tag , random_access_traversal_tag , Seq , struct_size::type>::value > type; static type call(Seq& seq) { return type(seq,0); } }; }; template <> struct end_impl { template struct apply { typedef basic_iterator< struct_iterator_tag , assoc_struct_category , Seq , struct_size::type>::value > type; static type call(Seq& seq) { return type(seq,0); } }; }; }}} #endif extension.hpp000444000765000024 302512161110625 26502 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_EXTENSION_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_EXTENSION_HPP #include namespace boost { namespace fusion { struct struct_tag; struct struct_iterator_tag; struct assoc_struct_tag; struct fusion_sequence_tag; struct assoc_struct_category : random_access_traversal_tag, associative_tag {}; namespace extension { struct no_such_member; struct access { template struct struct_member; template struct adt_attribute_access; }; template struct adt_attribute_proxy; template struct struct_member_name; template struct struct_size; template struct struct_is_view; template struct struct_assoc_key; } }} #endif is_sequence_impl.hpp000444000765000024 200712161110614 30007 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_IS_SEQUENCE_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_IS_SEQUENCE_IMPL_HPP #include namespace boost { namespace fusion { namespace extension { template struct is_sequence_impl; template<> struct is_sequence_impl { template struct apply : mpl::true_ {}; }; template <> struct is_sequence_impl : is_sequence_impl {}; }}} #endif is_view_impl.hpp000444000765000024 176412161110660 27163 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_IS_VIEW_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_IS_VIEW_IMPL_HPP namespace boost { namespace fusion { namespace extension { template struct is_view_impl; template<> struct is_view_impl { template struct apply : struct_is_view::type> {}; }; template <> struct is_view_impl : is_view_impl {}; }}} #endif namespace.hpp000444000765000024 547412161110674 26440 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2009-2010 Hartmut Kaiser Copyright (c) 2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_NAMESPACE_HPP #define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_NAMESPACE_HPP #include #include #include #include #include #include #include #define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_BEGIN_I(R,DATA,ELEM) \ namespace ELEM { #define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_END_I(Z,I,DATA) } #define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I(Z,I,ELEM) ELEM:: #define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \ BOOST_PP_IF( \ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \ BOOST_PP_SEQ_FOR_EACH_R, \ BOOST_PP_TUPLE_EAT(4))( \ 1, \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_BEGIN_I, \ _, \ BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ)) #define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ) \ BOOST_PP_REPEAT_1( \ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_END_I, \ _) #define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION(NAMESPACE_SEQ) \ BOOST_PP_IF( \ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \ BOOST_PP_SEQ_FOR_EACH_R, \ BOOST_PP_TUPLE_EAT(4))( \ 1, \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I, \ _, \ BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ)) #endif proxy_type.hpp000444000765000024 464412161110615 26717 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2009-2010 Hartmut Kaiser Copyright (c) 2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_PROXY_TYPE_HPP #define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_PROXY_TYPE_HPP #include #define BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \ WRAPPED_TYPE,NAMESPACE_SEQ,NAME) \ \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \ \ struct NAME \ { \ NAME(WRAPPED_TYPE& in_obj) \ : obj(in_obj) \ {} \ \ WRAPPED_TYPE& obj; \ \ private: \ NAME& operator= (NAME const&); \ }; \ \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ) #define BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE( \ WRAPPED_TYPE, NAMESPACE_SEQ, NAME) \ \ BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \ WRAPPED_TYPE, (0)NAMESPACE_SEQ, NAME) #endif size_impl.hpp000444000765000024 174112161110601 26456 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_SIZE_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_SIZE_IMPL_HPP namespace boost { namespace fusion { namespace extension { template struct size_impl; template <> struct size_impl { template struct apply : struct_size::type> {}; }; template <> struct size_impl : size_impl {}; }}} #endif value_at_impl.hpp000444000765000024 203112161110625 27303 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_VALUE_AT_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_VALUE_AT_IMPL_HPP namespace boost { namespace fusion { namespace extension { template struct value_at_impl; template <> struct value_at_impl { template struct apply : access::struct_member::type, N::value> {}; }; template <> struct value_at_impl : value_at_impl {}; }}} #endif value_of_impl.hpp000444000765000024 164012161110655 27313 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/adapted/struct/detail/*============================================================================= Copyright (c) 2009-2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_VALUE_OF_IMPL_HPP #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_VALUE_OF_IMPL_HPP namespace boost { namespace fusion { namespace extension { template struct value_of_impl; template <> struct value_of_impl { template struct apply : access::struct_member< typename remove_const::type , It::index::value > {}; }; }}} #endif algorithm000755000765000024 012161110637 21421 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusionquery000755000765000024 012161110700 22555 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithmfind.hpp000444000765000024 453712161110700 24354 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/query/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_FIND_05052005_1107) #define FUSION_FIND_05052005_1107 #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace result_of { template struct find : mpl::if_< traits::is_segmented , detail::result_of_segmented_find , detail::result_of_find_if< Sequence, is_same< typename mpl::if_< traits::is_associative , key_of , value_of >::type , T > > >::type {}; } template inline typename lazy_disable_if< is_const , result_of::find >::type const find(Sequence& seq) { typedef typename result_of::find::filter filter; return filter::call(seq); } template inline typename result_of::find::type const find(Sequence const& seq) { typedef typename result_of::find::filter filter; return filter::call(seq); } }} #endif find_fwd.hpp000444000765000024 206012161110611 25202 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/query/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_FIND_FWD_HPP_INCLUDED) #define BOOST_FUSION_FIND_FWD_HPP_INCLUDED #include #include namespace boost { namespace fusion { namespace result_of { template struct find; } template inline typename lazy_disable_if< is_const , result_of::find >::type const find(Sequence& seq); template inline typename result_of::find::type const find(Sequence const& seq); }} #endif find_if_fwd.hpp000444000765000024 215512161110613 25667 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/query/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_FIND_IF_FWD_HPP_INCLUDED) #define BOOST_FUSION_FIND_IF_FWD_HPP_INCLUDED #include #include // Forward declaration of find_if algorithm namespace boost { namespace fusion { namespace result_of { template struct find_if; } template typename lazy_disable_if< is_const , result_of::find_if >::type find_if(Sequence& seq); template typename result_of::find_if::type const find_if(Sequence const& seq); }} #endif detail000755000765000024 012161110642 24024 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/queryfind_if.hpp000444000765000024 1714412161110642 26317 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/query/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_FIND_IF_05052005_1107) #define FUSION_FIND_IF_05052005_1107 #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { struct random_access_traversal_tag; namespace detail { template struct apply_filter { typedef typename mpl::apply1< Pred, Iterator>::type type; BOOST_STATIC_CONSTANT(int, value = type::value); }; template struct main_find_if; template struct recursive_find_if { typedef typename main_find_if< typename result_of::next::type, Last, Pred >::type type; }; template struct main_find_if { typedef mpl::or_< result_of::equal_to , apply_filter > filter; typedef typename mpl::eval_if< filter , mpl::identity , recursive_find_if >::type type; }; template< typename First, typename Last, typename Pred, bool> struct choose_find_if; template struct choose_find_if : main_find_if {}; template struct unroll_again; template struct apply_offset_filter { typedef typename result_of::advance_c::type Shifted; typedef typename mpl::apply1< Pred , Shifted >::type type; BOOST_STATIC_CONSTANT(int, value = type::value); }; template struct unrolled_find_if { typedef typename mpl::eval_if< apply_filter, mpl::identity, mpl::eval_if< apply_offset_filter, result_of::advance_c, mpl::eval_if< apply_offset_filter, result_of::advance_c, mpl::eval_if< apply_offset_filter, result_of::advance_c, unroll_again< Iter, Pred, n, 4> > > > >::type type; }; template struct unrolled_find_if { typedef typename mpl::eval_if< apply_filter, mpl::identity, mpl::eval_if< apply_offset_filter, result_of::advance_c, mpl::eval_if< apply_offset_filter, result_of::advance_c, result_of::advance_c > > >::type type; }; template struct unrolled_find_if { typedef typename mpl::eval_if< apply_filter, mpl::identity, mpl::eval_if< apply_offset_filter, result_of::advance_c, result_of::advance_c > >::type type; }; template struct unrolled_find_if { typedef typename mpl::eval_if< apply_filter, mpl::identity, result_of::advance_c >::type type; }; template struct unroll_again { typedef typename unrolled_find_if< typename result_of::advance_c::type, Pred, n-unrolling>::type type; }; template struct unrolled_find_if { typedef Iter type; }; template struct choose_find_if { typedef typename result_of::distance::type N; typedef typename unrolled_find_if::type type; }; template struct static_find_if { typedef typename choose_find_if< First , Last , typename mpl::lambda::type , is_base_of::type>::value >::type type; template static type recursive_call(Iterator const& iter, mpl::true_) { return iter; } template static type recursive_call(Iterator const& iter, mpl::false_) { return recursive_call(fusion::next(iter)); } template static type recursive_call(Iterator const& iter) { typedef result_of::equal_to found; return recursive_call(iter, found()); } template static type choose_call(Iterator const& iter, Tag) { return recursive_call(iter); } template static type choose_call(Iterator const& iter, random_access_traversal_tag) { typedef typename result_of::distance::type N; return fusion::advance(iter); } template static type iter_call(Iterator const& iter) { return choose_call(iter, typename traits::category_of::type()); } template static type call(Sequence& seq) { return iter_call(fusion::begin(seq)); } }; template struct result_of_find_if { typedef static_find_if< typename result_of::begin::type , typename result_of::end::type , Pred > filter; typedef typename filter::type type; }; }}} #endif segmented_find.hpp000444000765000024 563012161110642 27651 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/query/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_FIND_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_FIND_HPP_INCLUDED #include #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct segmented_find_fun { template struct apply { typedef typename result_of::find::type iterator_type; typedef typename result_of::equal_to< iterator_type , typename result_of::end::type >::type continue_type; typedef typename mpl::eval_if< continue_type , mpl::identity , result_of::make_segmented_iterator< iterator_type , Context > >::type type; static type call(Sequence& seq, State const&state, Context const& context, segmented_find_fun) { return call_impl(seq, state, context, continue_type()); } static type call_impl(Sequence&, State const&state, Context const&, mpl::true_) { return state; } static type call_impl(Sequence& seq, State const&, Context const& context, mpl::false_) { return fusion::make_segmented_iterator(fusion::find(seq), context); } }; }; template struct result_of_segmented_find { struct filter { typedef typename result_of::segmented_fold_until< Sequence , typename result_of::end::type , segmented_find_fun >::type type; static type call(Sequence& seq) { return fusion::segmented_fold_until( seq , fusion::end(seq) , detail::segmented_find_fun()); } }; typedef typename filter::type type; }; }}} #endif transformation000755000765000024 012161110702 24460 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithmerase.hpp000444000765000024 1161312161110637 26456 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/transformation/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ERASE_07232005_0534) #define FUSION_ERASE_07232005_0534 #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace result_of { template struct compute_erase_last // put this in detail!!! { typedef typename result_of::end::type seq_last_type; typedef typename convert_iterator::type first_type; typedef typename mpl::if_< result_of::equal_to , first_type , typename result_of::next::type >::type type; static type call(First const& first, mpl::false_) { return fusion::next(convert_iterator::call(first)); } static type call(First const& first, mpl::true_) { return convert_iterator::call(first); } static type call(First const& first) { return call(first, result_of::equal_to()); } }; struct use_default; template struct fusion_default_help : mpl::if_< is_same , Default , T > { }; template < typename Sequence , typename First , typename Last = use_default> struct erase { typedef typename result_of::begin::type seq_first_type; typedef typename result_of::end::type seq_last_type; BOOST_STATIC_ASSERT((!result_of::equal_to::value)); typedef First FirstType; typedef typename fusion_default_help< Last , typename compute_erase_last::type >::type LastType; typedef typename convert_iterator::type first_type; typedef typename convert_iterator::type last_type; typedef iterator_range left_type; typedef iterator_range right_type; typedef joint_view type; }; } template typename lazy_enable_if< traits::is_sequence , typename result_of::erase >::type erase(Sequence const& seq, First const& first) { typedef result_of::erase result_of; typedef typename result_of::left_type left_type; typedef typename result_of::right_type right_type; typedef typename result_of::type result_type; left_type left( fusion::begin(seq) , convert_iterator::call(first)); right_type right( fusion::result_of::compute_erase_last::call(first) , fusion::end(seq)); return result_type(left, right); } template typename result_of::erase::type erase(Sequence const& seq, First const& first, Last const& last) { typedef result_of::erase result_of; typedef typename result_of::left_type left_type; typedef typename result_of::right_type right_type; typedef typename result_of::type result_type; left_type left(fusion::begin(seq), first); right_type right(last, fusion::end(seq)); return result_type(left, right); } }} #endif erase_key.hpp000444000765000024 211612161110656 27305 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/transformation/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ERASE_KEY_10022005_1851) #define FUSION_ERASE_KEY_10022005_1851 #include #include #include #include namespace boost { namespace fusion { namespace result_of { template struct erase_key : erase::type> {}; } template inline typename result_of::erase_key::type erase_key(Sequence const& seq) { return erase(seq, find(seq)); } }} #endif insert.hpp000444000765000024 556712161110644 26654 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/transformation/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INSERT_07222005_0730) #define FUSION_INSERT_07222005_0730 #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace result_of { template struct insert { typedef typename detail::as_fusion_element::type element_type; typedef typename convert_iterator::type pos_type; typedef typename result_of::begin::type first_type; typedef typename result_of::end::type last_type; typedef iterator_range left_type; typedef iterator_range right_type; typedef fusion::single_view single_view; typedef joint_view left_insert_type; typedef joint_view type; }; } template inline typename lazy_enable_if< traits::is_sequence , result_of::insert >::type insert(Sequence const& seq, Position const& pos, T const& x) { typedef result_of::insert< Sequence const, Position, T> result_of; typedef typename result_of::left_type left_type; typedef typename result_of::right_type right_type; typedef typename result_of::single_view single_view; typedef typename result_of::left_insert_type left_insert_type; typedef typename result_of::type result; left_type left(fusion::begin(seq), convert_iterator::call(pos)); right_type right(convert_iterator::call(pos), fusion::end(seq)); single_view insert(x); left_insert_type left_insert(left, insert); return result(left_insert, right); } }} #endif insert_range.hpp000444000765000024 466712161110665 30033 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/transformation/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INSERT_RANGE_009172005_1147) #define FUSION_INSERT_RANGE_009172005_1147 #include #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace result_of { template struct insert_range { typedef typename convert_iterator::type pos_type; typedef typename result_of::begin::type first_type; typedef typename result_of::end::type last_type; typedef iterator_range left_type; typedef iterator_range right_type; typedef joint_view left_insert_type; typedef joint_view type; }; } template inline typename result_of::insert_range::type insert_range(Sequence const& seq, Position const& pos, Range const& range) { typedef result_of::insert_range result_of; typedef typename result_of::left_type left_type; typedef typename result_of::right_type right_type; typedef typename result_of::left_insert_type left_insert_type; typedef typename result_of::type result; left_type left(fusion::begin(seq), convert_iterator::call(pos)); right_type right(convert_iterator::call(pos), fusion::end(seq)); left_insert_type left_insert(left, range); return result(left_insert, right); } }} #endif pop_back.hpp000444000765000024 1165512161110665 27144 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/transformation/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_POP_BACK_09172005_1038) #define FUSION_POP_BACK_09172005_1038 #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { template struct pop_back_iterator : iterator_adapter< pop_back_iterator , Iterator_> { typedef iterator_adapter< pop_back_iterator , Iterator_> base_type; static bool const is_last = IsLast; pop_back_iterator(Iterator_ const& iterator_base) : base_type(iterator_base) {} template struct make { typedef pop_back_iterator type; static type call(BaseIterator const& i) { return type(i); } }; template struct equal_to_helper : mpl::identity {}; template struct equal_to_helper : result_of::next< typename I::iterator_base_type> {}; template struct equal_to : result_of::equal_to< typename equal_to_helper::type , typename equal_to_helper::type > {}; template struct distance : mpl::minus< typename result_of::distance< typename First::iterator_base_type , typename Last::iterator_base_type >::type , mpl::int_<(Last::is_last?1:0)> >::type {}; template struct prior_impl { typedef typename Iterator::iterator_base_type base_type; typedef typename result_of::prior::type base_prior; typedef pop_back_iterator type; static type call(Iterator const& i) { return type(fusion::prior(i.iterator_base)); } }; template struct prior_impl { // If this is the last iterator, we'll have to double back typedef typename Iterator::iterator_base_type base_type; typedef typename result_of::prior< typename result_of::prior::type >::type base_prior; typedef pop_back_iterator type; static type call(Iterator const& i) { return type(fusion::prior( fusion::prior(i.iterator_base))); } }; template struct prior : prior_impl {}; }; namespace result_of { template struct pop_back { BOOST_MPL_ASSERT_NOT((result_of::empty)); typedef pop_back_iterator< typename begin::type, false> begin_type; typedef pop_back_iterator< typename end::type, true> end_type; typedef iterator_range type; }; } template inline typename result_of::pop_back::type pop_back(Sequence const& seq) { typedef result_of::pop_back comp; typedef typename comp::begin_type begin_type; typedef typename comp::end_type end_type; typedef typename comp::type result; return result( begin_type(fusion::begin(seq)) , end_type(fusion::end(seq)) ); } }} #endif pop_front.hpp000444000765000024 261312161110702 27336 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/transformation/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_POP_FRONT_09172005_1115) #define FUSION_POP_FRONT_09172005_1115 #include #include #include #include namespace boost { namespace fusion { namespace result_of { template struct pop_front { typedef iterator_range< typename next< typename begin::type >::type , typename end::type > type; }; } template inline typename result_of::pop_front::type pop_front(Sequence const& seq) { typedef typename result_of::pop_front::type result; return result(fusion::next(fusion::begin(seq)), fusion::end(seq)); } }} #endif push_back.hpp000444000765000024 311012161110654 27266 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/transformation/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_PUSH_BACK_07162005_0235) #define FUSION_PUSH_BACK_07162005_0235 #include #include #include #include #include namespace boost { namespace fusion { namespace result_of { template struct push_back { typedef fusion::single_view::type> single_view; typedef joint_view type; }; } template inline typename lazy_enable_if< traits::is_sequence , result_of::push_back >::type push_back(Sequence const& seq, T const& x) { typedef typename result_of::push_back push_back; typedef typename push_back::single_view single_view; typedef typename push_back::type result; single_view x_(x); return result(seq, x_); } }} #endif push_front.hpp000444000765000024 312112161110646 27521 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/algorithm/transformation/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_PUSH_FRONT_07162005_0749) #define FUSION_PUSH_FRONT_07162005_0749 #include #include #include #include #include namespace boost { namespace fusion { namespace result_of { template struct push_front { typedef fusion::single_view::type> single_view; typedef joint_view type; }; } template inline typename lazy_enable_if< traits::is_sequence , result_of::push_front >::type push_front(Sequence const& seq, T const& x) { typedef typename result_of::push_front push_front; typedef typename push_front::single_view single_view; typedef typename push_front::type result; single_view x_(x); return result(x_, seq); } }} #endif container000755000765000024 012161110644 21413 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusiondeque000755000765000024 012161110645 22517 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/containerdeque_fwd.hpp000444000765000024 252712161110645 25336 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/*============================================================================= Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2007 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DEQUE_FORWARD_02092007_0749) #define FUSION_DEQUE_FORWARD_02092007_0749 #include /////////////////////////////////////////////////////////////////////////////// // With no decltype and variadics, we will use the C++03 version /////////////////////////////////////////////////////////////////////////////// #if (defined(BOOST_NO_DECLTYPE) \ || defined(BOOST_NO_VARIADIC_TEMPLATES) \ || defined(BOOST_NO_RVALUE_REFERENCES)) # include #else # if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) # define BOOST_FUSION_HAS_VARIADIC_DEQUE # endif /////////////////////////////////////////////////////////////////////////////// // C++11 interface /////////////////////////////////////////////////////////////////////////////// namespace boost { namespace fusion { template struct deque; }} #endif #endif limits.hpp000444000765000024 216712161110612 24666 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/*============================================================================= Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_LIMITS_26112006_1737) #define BOOST_FUSION_DEQUE_LIMITS_26112006_1737 #if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif #include #if !defined(FUSION_MAX_DEQUE_SIZE) # define FUSION_MAX_DEQUE_SIZE FUSION_MAX_VECTOR_SIZE #else # if FUSION_MAX_DEQUE_SIZE < 3 # undef FUSION_MAX_DEQUE_SIZE # if (FUSION_MAX_VECTOR_SIZE > 10) # define FUSION_MAX_DEQUE_SIZE 10 # else # define FUSION_MAX_DEQUE_SIZE FUSION_MAX_VECTOR_SIZE # endif # endif #endif #define FUSION_MAX_DEQUE_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_DEQUE_SIZE)) #endif detail000755000765000024 012161110646 23762 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/dequepp_deque_fwd.hpp000444000765000024 373612161110646 27303 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/detail/*============================================================================= Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2007 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_PP_DEQUE_FORWARD_02092007_0749) #define FUSION_PP_DEQUE_FORWARD_02092007_0749 #if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct void_; template< BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( FUSION_MAX_DEQUE_SIZE, typename T, void_)> struct deque; }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif preprocessed000755000765000024 012161110702 26451 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/detaildeque10_fwd.hpp000444000765000024 134612161110604 31430 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template< typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_> struct deque; }} deque20_fwd.hpp000444000765000024 171412161110702 31427 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template< typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_> struct deque; }} deque30_fwd.hpp000444000765000024 226212161110663 31435 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template< typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_> struct deque; }} deque40_fwd.hpp000444000765000024 263012161110656 31437 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template< typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_> struct deque; }} deque50_fwd.hpp000444000765000024 317612161110610 31434 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template< typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_> struct deque; }} deque_fwd.hpp000444000765000024 205012161110625 31263 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/deque/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_DEQUE_SIZE <= 10 #include #elif FUSION_MAX_DEQUE_SIZE <= 20 #include #elif FUSION_MAX_DEQUE_SIZE <= 30 #include #elif FUSION_MAX_DEQUE_SIZE <= 40 #include #elif FUSION_MAX_DEQUE_SIZE <= 50 #include #else #error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers" #endif generation000755000765000024 012161110644 23546 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/containerignore.hpp000444000765000024 201112161110644 25671 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/generation/*============================================================================= Copyright (c) 2001 Doug Gregor Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_IGNORE_07192005_0329) #define FUSION_IGNORE_07192005_0329 namespace boost { namespace fusion { // Swallows any assignment (by Doug Gregor) namespace detail { struct swallow_assign { template swallow_assign const& operator=(const T&) const { return *this; } }; } // "ignore" allows tuple positions to be ignored when using "tie". detail::swallow_assign const ignore = detail::swallow_assign(); }} #endif list000755000765000024 012161110702 22361 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/containercons.hpp000444000765000024 1132412161110702 24212 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_CONS_07172005_0843) #define FUSION_CONS_07172005_0843 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { struct void_; struct cons_tag; struct forward_traversal_tag; struct fusion_sequence_tag; struct nil : sequence_base { typedef mpl::int_<0> size; typedef cons_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef mpl::false_ is_view; typedef forward_traversal_tag category; typedef void_ car_type; typedef void_ cdr_type; nil() {} template nil(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/) {} template void assign_from_iter(Iterator const& /*iter*/) { } }; template struct cons : sequence_base > { typedef mpl::int_ size; typedef cons_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef mpl::false_ is_view; typedef forward_traversal_tag category; typedef Car car_type; typedef Cdr cdr_type; cons() : car(), cdr() {} explicit cons(typename detail::call_param::type in_car) : car(in_car), cdr() {} cons( typename detail::call_param::type in_car , typename detail::call_param::type in_cdr) : car(in_car), cdr(in_cdr) {} template cons(cons const& rhs) : car(rhs.car), cdr(rhs.cdr) {} cons(cons const& rhs) : car(rhs.car), cdr(rhs.cdr) {} template cons( Sequence const& seq , typename boost::disable_if< mpl::or_< is_convertible // use copy ctor instead , is_convertible // use copy to car instead > >::type* /*dummy*/ = 0 ) : car(*fusion::begin(seq)) , cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {} template cons(Iterator const& iter, mpl::true_ /*this_is_an_iterator*/) : car(*iter) , cdr(fusion::next(iter), mpl::true_()) {} template cons& operator=(cons const& rhs) { car = rhs.car; cdr = rhs.cdr; return *this; } cons& operator=(cons const& rhs) { car = rhs.car; cdr = rhs.cdr; return *this; } template typename boost::disable_if, cons&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type Iterator; Iterator iter = fusion::begin(seq); this->assign_from_iter(iter); return *this; } template void assign_from_iter(Iterator const& iter) { car = *iter; cdr.assign_from_iter(fusion::next(iter)); } car_type car; cdr_type cdr; }; }} #endif cons_fwd.hpp000444000765000024 120112161110611 25022 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_CONS_FWD_HPP_INCLUDED) #define BOOST_FUSION_CONS_FWD_HPP_INCLUDED namespace boost { namespace fusion { struct nil; template struct cons; }} #endif cons_iterator.hpp000444000765000024 526612161110650 26115 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_CONS_ITERATOR_07172005_0849) #define FUSION_CONS_ITERATOR_07172005_0849 #include #include #include #include #include #include #include namespace boost { namespace fusion { struct nil; struct cons_iterator_tag; struct forward_traversal_tag; template struct cons_iterator_identity; template struct cons_iterator : iterator_base > { typedef cons_iterator_tag fusion_tag; typedef forward_traversal_tag category; typedef Cons cons_type; typedef cons_iterator_identity< typename add_const::type> identity; explicit cons_iterator(cons_type& in_cons) : cons(in_cons) {} cons_type& cons; private: // silence MSVC warning C4512: assignment operator could not be generated cons_iterator& operator= (cons_iterator const&); }; struct nil_iterator : iterator_base { typedef forward_traversal_tag category; typedef cons_iterator_tag fusion_tag; typedef nil cons_type; typedef cons_iterator_identity< add_const::type> identity; nil_iterator() {} explicit nil_iterator(nil const&) {} }; template <> struct cons_iterator : nil_iterator { cons_iterator() {} explicit cons_iterator(nil const&) {} }; template <> struct cons_iterator : nil_iterator { cons_iterator() {} explicit cons_iterator(nil const&) {} }; template <> struct cons_iterator > : nil_iterator { cons_iterator() {} explicit cons_iterator(nil const&) {} }; template <> struct cons_iterator const> : nil_iterator { cons_iterator() {} explicit cons_iterator(nil const&) {} }; }} #endif limits.hpp000444000765000024 137412161110603 24535 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_LIST_LIMITS_07172005_0112) #define FUSION_LIST_LIMITS_07172005_0112 #if !defined(FUSION_MAX_LIST_SIZE) # define FUSION_MAX_LIST_SIZE 10 #else # if FUSION_MAX_LIST_SIZE < 3 # undef FUSION_MAX_LIST_SIZE # define FUSION_MAX_LIST_SIZE 10 # endif #endif #define FUSION_MAX_LIST_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_LIST_SIZE)) #endif list_fwd.hpp000444000765000024 346712161110611 25053 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_LIST_FORWARD_07172005_0224) #define FUSION_LIST_FORWARD_07172005_0224 #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/list" FUSION_MAX_LIST_SIZE_STR "_fwd.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct void_; template < BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( FUSION_MAX_LIST_SIZE, typename T, void_) > struct list; }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif detail000755000765000024 012161110663 23631 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/listat_impl.hpp000444000765000024 743712161110612 26131 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_AT_IMPL_07172005_0726) #define FUSION_AT_IMPL_07172005_0726 #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct cons_deref { typedef typename Cons::car_type type; }; template struct cons_advance { typedef typename cons_advance::type::cdr_type type; }; template struct cons_advance { typedef Cons type; }; template struct cons_advance { typedef typename Cons::cdr_type type; }; template struct cons_advance { #if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above typedef typename Cons::cdr_type::cdr_type type; #else typedef typename Cons::cdr_type _a; typedef typename _a::cdr_type type; #endif }; template struct cons_advance { #if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above typedef typename Cons::cdr_type::cdr_type::cdr_type type; #else typedef typename Cons::cdr_type _a; typedef typename _a::cdr_type _b; typedef typename _b::cdr_type type; #endif }; template struct cons_advance { #if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above typedef typename Cons::cdr_type::cdr_type::cdr_type::cdr_type type; #else typedef typename Cons::cdr_type _a; typedef typename _a::cdr_type _b; typedef typename _b::cdr_type _c; typedef typename _c::cdr_type type; #endif }; } struct cons_tag; namespace extension { template struct at_impl; template <> struct at_impl { template struct apply { typedef typename detail::cons_deref< typename detail::cons_advance::type>::type element; typedef typename mpl::if_< is_const , typename detail::cref_result::type , typename detail::ref_result::type >::type type; template static type call(Cons& s, mpl::int_) { return call(s.cdr, mpl::int_()); } template static type call(Cons& s, mpl::int_<0>) { return s.car; } static type call(Sequence& s) { return call(s, mpl::int_()); } }; }; } }} #endif begin_impl.hpp000444000765000024 236412161110627 26611 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_BEGIN_IMPL_07172005_0824) #define FUSION_BEGIN_IMPL_07172005_0824 #include #include namespace boost { namespace fusion { struct nil; struct cons_tag; template struct cons; template struct cons_iterator; namespace extension { template struct begin_impl; template <> struct begin_impl { template struct apply { typedef cons_iterator type; static type call(Sequence& t) { return type(t); } }; }; } }} #endif deref_impl.hpp000444000765000024 305212161110652 26603 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DEREF_IMPL_07172005_0831) #define FUSION_DEREF_IMPL_07172005_0831 #include #include #include #include namespace boost { namespace fusion { struct cons_iterator_tag; namespace extension { template struct deref_impl; template <> struct deref_impl { template struct apply { typedef typename Iterator::cons_type cons_type; typedef typename cons_type::car_type value_type; typedef typename mpl::eval_if< is_const , add_reference::type> , add_reference >::type type; static type call(Iterator const& i) { return i.cons.car; } }; }; } }} #endif empty_impl.hpp000444000765000024 177012161110617 26662 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2007 Tobias Schwinger Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEQUENCE_EMPTY_IMPL_HPP_INCLUDED) #define BOOST_FUSION_SEQUENCE_EMPTY_IMPL_HPP_INCLUDED #include namespace boost { namespace fusion { struct cons_tag; struct nil; template struct cons; namespace extension { template struct empty_impl; template <> struct empty_impl { template struct apply : boost::is_convertible {}; }; } }} #endif end_impl.hpp000444000765000024 250412161110663 26267 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_END_IMPL_07172005_0828) #define FUSION_END_IMPL_07172005_0828 #include #include namespace boost { namespace fusion { struct nil; struct cons_tag; template struct cons; template struct cons_iterator; namespace extension { template struct end_impl; template <> struct end_impl { template struct apply { typedef cons_iterator< typename mpl::if_, nil const, nil>::type> type; static type call(Sequence&) { return type(); } }; }; } }} #endif equal_to_impl.hpp000444000765000024 212612161110655 27333 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_EQUAL_TO_IMPL_09172005_1120) #define FUSION_EQUAL_TO_IMPL_09172005_1120 #include #include #include namespace boost { namespace fusion { struct cons_iterator_tag; namespace extension { template struct equal_to_impl; template <> struct equal_to_impl { template struct apply : is_same< typename I1::identity , typename I2::identity > { }; }; } }} #endif next_impl.hpp000444000765000024 332512161110641 26475 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_NEXT_IMPL_07172005_0836) #define FUSION_NEXT_IMPL_07172005_0836 #include #include #include #include #include #include namespace boost { namespace fusion { struct cons_iterator_tag; template struct cons_iterator; namespace extension { template struct next_impl; template <> struct next_impl { template struct apply { typedef typename Iterator::cons_type cons_type; typedef typename cons_type::cdr_type cdr_type; typedef cons_iterator< typename mpl::eval_if< is_const , add_const , mpl::identity >::type> type; static type call(Iterator const& i) { return type(i.cons.cdr); } }; }; } }} #endif reverse_cons.hpp000444000765000024 265212161110614 27175 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_REVERSE_CONS_HPP_INCLUDED) #define BOOST_FUSION_REVERSE_CONS_HPP_INCLUDED #include namespace boost { namespace fusion { namespace detail { //////////////////////////////////////////////////////////////////////////// template struct reverse_cons; template struct reverse_cons, State> { typedef reverse_cons > impl; typedef typename impl::type type; static type call(cons const &cons, State const &state = State()) { typedef fusion::cons cdr_type; return impl::call(cons.cdr, cdr_type(cons.car, state)); } }; template struct reverse_cons { typedef State type; static State const &call(nil const &, State const &state = State()) { return state; } }; }}} #endif value_at_impl.hpp000444000765000024 245712161110656 27332 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VALUE_AT_IMPL_07172005_0952) #define FUSION_VALUE_AT_IMPL_07172005_0952 #include #include #include #include namespace boost { namespace fusion { struct cons_tag; namespace extension { template struct value_at_impl; template <> struct value_at_impl { template struct apply { typedef typename mpl::eval_if< mpl::bool_ , mpl::identity , apply > >::type type; }; }; } }} #endif value_of_impl.hpp000444000765000024 176712161110606 27330 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VALUE_OF_IMPL_07172005_0838) #define FUSION_VALUE_OF_IMPL_07172005_0838 namespace boost { namespace fusion { struct cons_iterator_tag; namespace extension { template struct value_of_impl; template <> struct value_of_impl { template struct apply { typedef typename Iterator::cons_type cons_type; typedef typename cons_type::car_type type; }; }; } }} #endif preprocessed000755000765000024 012161110702 26321 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detaillist10_fwd.hpp000444000765000024 135412161110702 31146 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ > struct list; }} list20_fwd.hpp000444000765000024 172212161110635 31153 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ > struct list; }} list30_fwd.hpp000444000765000024 227012161110620 31145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ > struct list; }} list40_fwd.hpp000444000765000024 263612161110612 31155 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ > struct list; }} list50_fwd.hpp000444000765000024 320412161110611 31145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ > struct list; }} list_fwd.hpp000444000765000024 203012161110662 31002 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/list/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_LIST_SIZE <= 10 #include #elif FUSION_MAX_LIST_SIZE <= 20 #include #elif FUSION_MAX_LIST_SIZE <= 30 #include #elif FUSION_MAX_LIST_SIZE <= 40 #include #elif FUSION_MAX_LIST_SIZE <= 50 #include #else #error "FUSION_MAX_LIST_SIZE out of bounds for preprocessed headers" #endif map000755000765000024 012161110631 22164 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/containerlimits.hpp000444000765000024 167012161110631 24337 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_MAP_LIMITS_07212005_1104) #define FUSION_MAP_LIMITS_07212005_1104 #include #if !defined(FUSION_MAX_MAP_SIZE) # define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE #else # if FUSION_MAX_MAP_SIZE < 3 # undef FUSION_MAX_MAP_SIZE # if (FUSION_MAX_VECTOR_SIZE > 10) # define FUSION_MAX_MAP_SIZE 10 # else # define FUSION_MAX_MAP_SIZE FUSION_MAX_VECTOR_SIZE # endif # endif #endif #define FUSION_MAX_MAP_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_MAP_SIZE)) #endif map_fwd.hpp000444000765000024 354112161110611 24450 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_MAP_FORWARD_07212005_1105) #define FUSION_MAP_FORWARD_07212005_1105 #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map" FUSION_MAX_MAP_SIZE_STR "_fwd.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct void_; struct map_tag; struct map_iterator_tag; template < BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( FUSION_MAX_MAP_SIZE, typename T, void_) > struct map; }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif detail000755000765000024 012161110623 23427 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/mappreprocessed000755000765000024 012161110663 26131 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/detailmap10_fwd.hpp000444000765000024 143612161110637 30562 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct map_tag; struct map_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ > struct map; }} map20_fwd.hpp000444000765000024 200412161110623 30546 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct map_tag; struct map_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ > struct map; }} map30_fwd.hpp000444000765000024 235212161110655 30562 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct map_tag; struct map_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ > struct map; }} map40_fwd.hpp000444000765000024 272012161110663 30561 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct map_tag; struct map_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ > struct map; }} map50_fwd.hpp000444000765000024 326612161110631 30563 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct map_tag; struct map_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ > struct map; }} map_fwd.hpp000444000765000024 201012161110655 30406 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/map/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_MAP_SIZE <= 10 #include #elif FUSION_MAX_MAP_SIZE <= 20 #include #elif FUSION_MAX_MAP_SIZE <= 30 #include #elif FUSION_MAX_MAP_SIZE <= 40 #include #elif FUSION_MAX_MAP_SIZE <= 50 #include #else #error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers" #endif set000755000765000024 012161110643 22205 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/containerlimits.hpp000444000765000024 167012161110603 24354 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SET_LIMITS_09162005_1103) #define FUSION_SET_LIMITS_09162005_1103 #include #if !defined(FUSION_MAX_SET_SIZE) # define FUSION_MAX_SET_SIZE FUSION_MAX_VECTOR_SIZE #else # if FUSION_MAX_SET_SIZE < 3 # undef FUSION_MAX_SET_SIZE # if (FUSION_MAX_VECTOR_SIZE > 10) # define FUSION_MAX_SET_SIZE 10 # else # define FUSION_MAX_SET_SIZE FUSION_MAX_VECTOR_SIZE # endif # endif #endif #define FUSION_MAX_SET_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_SET_SIZE)) #endif set_fwd.hpp000444000765000024 354112161110643 24511 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SET_FORWARD_09162005_1102) #define FUSION_SET_FORWARD_09162005_1102 #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/set" FUSION_MAX_SET_SIZE_STR "_fwd.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct void_; struct set_tag; struct set_iterator_tag; template < BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( FUSION_MAX_SET_SIZE, typename T, void_) > struct set; }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif detail000755000765000024 012161110613 23444 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/setpreprocessed000755000765000024 012161110666 26152 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/detailset10_fwd.hpp000444000765000024 143612161110614 30611 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct set_tag; struct set_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ > struct set; }} set20_fwd.hpp000444000765000024 200412161110613 30601 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct set_tag; struct set_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ > struct set; }} set30_fwd.hpp000444000765000024 235212161110657 30620 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct set_tag; struct set_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ > struct set; }} set40_fwd.hpp000444000765000024 272012161110613 30610 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct set_tag; struct set_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ > struct set; }} set50_fwd.hpp000444000765000024 326612161110651 30621 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct set_tag; struct set_iterator_tag; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ > struct set; }} set_fwd.hpp000444000765000024 201012161110666 30444 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/set/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_SET_SIZE <= 10 #include #elif FUSION_MAX_SET_SIZE <= 20 #include #elif FUSION_MAX_SET_SIZE <= 30 #include #elif FUSION_MAX_SET_SIZE <= 40 #include #elif FUSION_MAX_SET_SIZE <= 50 #include #else #error "FUSION_MAX_SET_SIZE out of bounds for preprocessed headers" #endif vector000755000765000024 012161110701 22707 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/containerlimits.hpp000444000765000024 150512161110611 25057 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR_LIMITS_07072005_1246) #define FUSION_VECTOR_LIMITS_07072005_1246 #include #if !defined(FUSION_MAX_VECTOR_SIZE) # define FUSION_MAX_VECTOR_SIZE 10 #else # if FUSION_MAX_VECTOR_SIZE < 3 # undef FUSION_MAX_VECTOR_SIZE # define FUSION_MAX_VECTOR_SIZE 10 # endif #endif #define FUSION_MAX_VECTOR_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_VECTOR_SIZE)) #endif vector.hpp000444000765000024 1600612161110617 25110 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR_07072005_1244) #define FUSION_VECTOR_07072005_1244 #include #include #include #include #include #include #include #include #include #if !defined(__WAVE__) #if BOOST_WORKAROUND(BOOST_MSVC, <= 1600) #define BOOST_FUSION_VECTOR_COPY_INIT() \ ctor_helper(rhs, is_base_of()) \ #define BOOST_FUSION_VECTOR_CTOR_HELPER() \ static vector_n const& \ ctor_helper(vector const& rhs, mpl::true_) \ { \ return rhs.vec; \ } \ \ template \ static T const& \ ctor_helper(T const& rhs, mpl::false_) \ { \ return rhs; \ } #else #define BOOST_FUSION_VECTOR_COPY_INIT() \ rhs \ #define BOOST_FUSION_VECTOR_CTOR_HELPER() #endif #endif // !defined(__WAVE__) #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vvector" FUSION_MAX_VECTOR_SIZE_STR ".hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct void_; struct fusion_sequence_tag; template struct vector : sequence_base > { private: typedef typename detail::vector_n_chooser< BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>::type vector_n; template friend struct vector; public: typedef typename vector_n::types types; typedef typename vector_n::fusion_tag fusion_tag; typedef typename vector_n::tag tag; typedef typename vector_n::size size; typedef typename vector_n::category category; typedef typename vector_n::is_view is_view; vector() : vec() {} template vector(vector const& rhs) : vec(rhs.vec) {} vector(vector const& rhs) : vec(rhs.vec) {} #if !defined(BOOST_NO_RVALUE_REFERENCES) vector(vector&& rhs) : vec(std::forward(rhs.vec)) {} #endif template vector(Sequence const& rhs) : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} // Expand a couple of forwarding constructors for arguments // of type (T0), (T0, T1), (T0, T1, T2) etc. Example: // // vector( // typename detail::call_param::type _0 // , typename detail::call_param::type _1) // : vec(_0, _1) {} #include template vector& operator=(vector const& rhs) { vec = rhs.vec; return *this; } template vector& operator=(T const& rhs) { vec = rhs; return *this; } #if !defined(BOOST_NO_RVALUE_REFERENCES) vector& operator=(vector&& rhs) { vec = std::forward(rhs.vec); return *this; } template vector& operator=(T&& rhs) { vec = std::forward(rhs); return *this; } #endif template typename add_reference< typename mpl::at_c::type >::type at_impl(mpl::int_ index) { return vec.at_impl(index); } template typename add_reference< typename add_const< typename mpl::at_c::type >::type >::type at_impl(mpl::int_ index) const { return vec.at_impl(index); } template typename add_reference< typename mpl::at::type >::type at_impl(I /*index*/) { return vec.at_impl(mpl::int_()); } template typename add_reference< typename add_const< typename mpl::at::type >::type >::type at_impl(I /*index*/) const { return vec.at_impl(mpl::int_()); } private: BOOST_FUSION_VECTOR_CTOR_HELPER() vector_n vec; }; }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif vector10.hpp000444000765000024 674212161110653 25237 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR10_05042005_0257) #define FUSION_VECTOR10_05042005_0257 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; template struct vector0 : sequence_base > { typedef mpl::vector0<> types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<0> size; vector0() {} template vector0(Sequence const& /*seq*/) {} }; }} #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector10.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { // expand vector1 to vector10 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, 10) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif vector10_fwd.hpp000444000765000024 431712161110650 26070 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector#ifndef BOOST_PP_IS_ITERATING /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_VECTOR10_FWD_HPP_INCLUDED) #define BOOST_FUSION_VECTOR10_FWD_HPP_INCLUDED #include #include #include namespace boost { namespace fusion { template struct vector0; }} #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector10_fwd.hpp") #endif /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { // expand vector1 to vector10 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, 10) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif #else template struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); #endif vector20.hpp000444000765000024 576312161110603 25235 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR20_05052005_0205) #define FUSION_VECTOR20_05052005_0205 #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(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector20.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; // expand vector11 to vector20 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (11, 20) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif vector20_fwd.hpp000444000765000024 415312161110602 26064 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector#ifndef BOOST_PP_IS_ITERATING /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_VECTOR20_FWD_HPP_INCLUDED) #define BOOST_FUSION_VECTOR20_FWD_HPP_INCLUDED #include #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector20_fwd.hpp") #endif /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { // expand vector11 to vector20 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (11, 20) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif #else template struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); #endif vector30.hpp000444000765000024 570712161110657 25245 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR30_05052005_0206) #define FUSION_VECTOR30_05052005_0206 #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(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector30.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; // expand vector21 to vector30 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (21, 30) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif vector30_fwd.hpp000444000765000024 415312161110610 26064 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector#ifndef BOOST_PP_IS_ITERATING /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_VECTOR30_FWD_HPP_INCLUDED) #define BOOST_FUSION_VECTOR30_FWD_HPP_INCLUDED #include #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector30_fwd.hpp") #endif /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { // expand vector21 to vector30 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (21, 30) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif #else template struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); #endif vector40.hpp000444000765000024 576312161110643 25243 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR40_05052005_0208) #define FUSION_VECTOR40_05052005_0208 #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(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector40.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; // expand vector31 to vector40 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (31, 40) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif vector40_fwd.hpp000444000765000024 415312161110636 26075 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector#ifndef BOOST_PP_IS_ITERATING /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_VECTOR40_FWD_HPP_INCLUDED) #define BOOST_FUSION_VECTOR40_FWD_HPP_INCLUDED #include #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector40_fwd.hpp") #endif /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { // expand vector31 to vector40 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (31, 40) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif #else template struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); #endif vector50.hpp000444000765000024 570712161110603 25236 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR50_05052005_0207) #define FUSION_VECTOR50_05052005_0207 #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(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector50.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; // expand vector41 to vector50 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (41, 50) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif vector50_fwd.hpp000444000765000024 415312161110637 26077 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector#ifndef BOOST_PP_IS_ITERATING /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_VECTOR50_FWD_HPP_INCLUDED) #define BOOST_FUSION_VECTOR50_FWD_HPP_INCLUDED #include #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector50_fwd.hpp") #endif /*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { // expand vector41 to vector50 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (41, 50) #include BOOST_PP_ITERATE() }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif #else template struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); #endif vector_fwd.hpp000444000765000024 446512161110701 25730 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR_FORWARD_07072005_0125) #define FUSION_VECTOR_FORWARD_07072005_0125 #include #include #include #if (FUSION_MAX_VECTOR_SIZE > 10) #include #endif #if (FUSION_MAX_VECTOR_SIZE > 20) #include #endif #if (FUSION_MAX_VECTOR_SIZE > 30) #include #endif #if (FUSION_MAX_VECTOR_SIZE > 40) #include #endif #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vvector" FUSION_MAX_VECTOR_SIZE_STR "_fwd.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct void_; template < BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( FUSION_MAX_VECTOR_SIZE, typename T, void_) > struct vector; }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif vector_iterator.hpp000444000765000024 360112161110647 27001 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VECTOR_ITERATOR_05042005_0635) #define FUSION_VECTOR_ITERATOR_05042005_0635 #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { struct vector_iterator_tag; struct random_access_traversal_tag; template struct vector_iterator_identity; template struct vector_iterator : iterator_base > { typedef mpl::int_ index; typedef Vector vector; typedef vector_iterator_tag fusion_tag; typedef random_access_traversal_tag category; typedef vector_iterator_identity< typename add_const::type, N> identity; vector_iterator(Vector& in_vec) : vec(in_vec) {} Vector& vec; private: // silence MSVC warning C4512: assignment operator could not be generated vector_iterator& operator= (vector_iterator const&); }; }} #endif detail000755000765000024 012161110702 24152 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vectoradvance_impl.hpp000444000765000024 240112161110640 27440 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ADVANCE_IMPL_09172005_1156) #define FUSION_ADVANCE_IMPL_09172005_1156 namespace boost { namespace fusion { struct vector_iterator_tag; template struct vector_iterator; namespace extension { template struct advance_impl; template <> struct advance_impl { template struct apply { typedef typename Iterator::index index; typedef typename Iterator::vector vector; typedef vector_iterator type; static type call(Iterator const& i) { return type(i.vec); } }; }; } }} #endif at_impl.hpp000444000765000024 331412161110674 26456 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_AT_IMPL_05042005_0741) #define FUSION_AT_IMPL_05042005_0741 #include #include #include #include namespace boost { namespace fusion { struct vector_tag; namespace extension { template struct at_impl; template <> struct at_impl { template struct apply { typedef typename mpl::at::type element; typedef typename detail::ref_result::type type; static type call(Sequence& v) { return v.at_impl(N()); } }; template struct apply { typedef typename mpl::at::type element; typedef typename detail::cref_result::type type; static type call(Sequence const& v) { return v.at_impl(N()); } }; }; } }} #endif begin_impl.hpp000444000765000024 210212161110616 27124 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_BEGIN_IMPL_05042005_1136) #define FUSION_BEGIN_IMPL_05042005_1136 #include namespace boost { namespace fusion { struct vector_tag; namespace extension { template struct begin_impl; template <> struct begin_impl { template struct apply { typedef vector_iterator type; static type call(Sequence& v) { return type(v); } }; }; } }} #endif deref_impl.hpp000444000765000024 330012161110601 27120 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DEREF_IMPL_05042005_1037) #define FUSION_DEREF_IMPL_05042005_1037 #include #include #include #include namespace boost { namespace fusion { struct vector_iterator_tag; namespace extension { template struct deref_impl; template <> struct deref_impl { template struct apply { typedef typename Iterator::vector vector; typedef typename Iterator::index index; typedef typename mpl::at< typename vector::types, index>::type element; typedef typename mpl::if_< is_const , typename fusion::detail::cref_result::type , typename fusion::detail::ref_result::type >::type type; static type call(Iterator const& i) { return i.vec.at_impl(index()); } }; }; } }} #endif distance_impl.hpp000444000765000024 251412161110616 27641 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DISTANCE_IMPL_09172005_0751) #define FUSION_DISTANCE_IMPL_09172005_0751 #include namespace boost { namespace fusion { struct vector_iterator_tag; namespace extension { template struct distance_impl; template <> struct distance_impl { template struct apply : mpl::minus { static typename mpl::minus< typename Last::index, typename First::index>::type call(First const&, Last const&) { typedef typename mpl::minus< typename Last::index, typename First::index>::type result; return result(); } }; }; } }} #endif end_impl.hpp000444000765000024 217312161110677 26625 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_END_IMPL_05042005_1142) #define FUSION_END_IMPL_05042005_1142 #include namespace boost { namespace fusion { struct vector_tag; namespace extension { template struct end_impl; template <> struct end_impl { template struct apply { typedef typename Sequence::size size; typedef vector_iterator type; static type call(Sequence& v) { return type(v); } }; }; } }} #endif equal_to_impl.hpp000444000765000024 213212161110650 27652 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_EQUAL_TO_IMPL_05052005_1215) #define FUSION_EQUAL_TO_IMPL_05052005_1215 #include #include #include namespace boost { namespace fusion { struct vector_iterator_tag; namespace extension { template struct equal_to_impl; template <> struct equal_to_impl { template struct apply : is_same< typename I1::identity , typename I2::identity > { }; }; } }} #endif next_impl.hpp000444000765000024 243112161110650 27021 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_NEXT_IMPL_05042005_1058) #define FUSION_NEXT_IMPL_05042005_1058 #include namespace boost { namespace fusion { struct vector_iterator_tag; template struct vector_iterator; namespace extension { template struct next_impl; template <> struct next_impl { template struct apply { typedef typename Iterator::vector vector; typedef typename Iterator::index index; typedef vector_iterator type; static type call(Iterator const& i) { return type(i.vec); } }; }; } }} #endif prior_impl.hpp000444000765000024 243512161110645 27206 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_PRIOR_IMPL_05042005_1145) #define FUSION_PRIOR_IMPL_05042005_1145 #include namespace boost { namespace fusion { struct vector_iterator_tag; template struct vector_iterator; namespace extension { template struct prior_impl; template <> struct prior_impl { template struct apply { typedef typename Iterator::vector vector; typedef typename Iterator::index index; typedef vector_iterator type; static type call(Iterator const& i) { return type(i.vec); } }; }; } }} #endif value_at_impl.hpp000444000765000024 167712161110702 27654 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VALUE_AT_IMPL_05052005_0232) #define FUSION_VALUE_AT_IMPL_05052005_0232 #include namespace boost { namespace fusion { struct vector_tag; namespace extension { template struct value_at_impl; template <> struct value_at_impl { template struct apply { typedef typename mpl::at::type type; }; }; } }} #endif value_of_impl.hpp000444000765000024 214212161110612 27640 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VALUE_OF_IMPL_05052005_1128) #define FUSION_VALUE_OF_IMPL_05052005_1128 #include namespace boost { namespace fusion { struct vector_iterator_tag; namespace extension { template struct value_of_impl; template <> struct value_of_impl { template struct apply { typedef typename Iterator::vector vector; typedef typename Iterator::index index; typedef typename mpl::at< typename vector::types, index>::type type; }; }; } }} #endif vector_forward_ctor.hpp000444000765000024 324212161110702 31076 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_PP_IS_ITERATING #if !defined(FUSION_VECTOR_FORWARD_CTOR_07122005_1123) #define FUSION_VECTOR_FORWARD_CTOR_07122005_1123 #include #include #include #define FUSION_FORWARD_CTOR_MOVE(z, n, _) std::move(_##n) #define BOOST_PP_FILENAME_1 \ #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #include BOOST_PP_ITERATE() #undef FUSION_FORWARD_CTOR_MOVE #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// // // Preprocessor vertical repetition code // /////////////////////////////////////////////////////////////////////////////// #define N BOOST_PP_ITERATION() #if N == 1 explicit #endif vector(BOOST_PP_ENUM_BINARY_PARAMS( N, typename detail::call_param::type _)) : vec(BOOST_PP_ENUM_PARAMS(N, _)) {} #if !defined(BOOST_NO_RVALUE_REFERENCES) #if N == 1 explicit #endif vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _)) : vec(BOOST_PP_ENUM(N, FUSION_FORWARD_CTOR_MOVE, _)) {} #endif #undef N #endif // defined(BOOST_PP_IS_ITERATING) vector_n.hpp000444000765000024 2025512161110666 26674 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ // No include guard. This file is meant to be included many times #if !defined(FUSION_MACRO_05042005) #define FUSION_MACRO_05042005 #define FUSION_VECTOR_MEMBER_MEMBER_DEFAULT_INIT(z, n, _) m##n() #define FUSION_VECTOR_MEMBER_MEMBER_INIT(z, n, _) m##n(_##n) #define FUSION_VECTOR_MEMBER_COPY_INIT(z, n, _) m##n(other.m##n) #define FUSION_VECTOR_MEMBER_FWD(z, n, _) m##n(std::forward(other.m##n)) #define FUSION_VECTOR_ARG_FWD(z, n, _) m##n(std::forward(_##n)) #define FUSION_VECTOR_MEMBER_MEMBER_DECL(z, n, _) T##n m##n; #define FUSION_VECTOR_MEMBER_FORWARD(z, n, _) std::forward(_##n) #define FUSION_VECTOR_MEMBER_MEMBER_ASSIGN(z, n, _) \ this->BOOST_PP_CAT(m, n) = vec.BOOST_PP_CAT(m, n); #define FUSION_VECTOR_MEMBER_DEREF_MEMBER_ASSIGN(z, n, _) \ this->BOOST_PP_CAT(m, n) = *BOOST_PP_CAT(i, n); #define FUSION_VECTOR_MEMBER_MEMBER_FORWARD(z, n, _) \ this->BOOST_PP_CAT(m, n) = std::forward< \ BOOST_PP_CAT(T, n)>(vec.BOOST_PP_CAT(m, n)); #define FUSION_VECTOR_MEMBER_AT_IMPL(z, n, _) \ typename add_reference::type \ at_impl(mpl::int_) { return this->m##n; } \ typename add_reference::type>::type \ at_impl(mpl::int_) const { return this->m##n; } #define FUSION_VECTOR_MEMBER_ITER_DECL_VAR(z, n, _) \ typedef typename result_of::next< \ BOOST_PP_CAT(I, BOOST_PP_DEC(n))>::type BOOST_PP_CAT(I, n); \ BOOST_PP_CAT(I, n) BOOST_PP_CAT(i, n) \ = fusion::next(BOOST_PP_CAT(i, BOOST_PP_DEC(n))); #endif #define N BOOST_PP_ITERATION() template struct BOOST_PP_CAT(vector_data, N) { BOOST_PP_CAT(vector_data, N)() : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_MEMBER_DEFAULT_INIT, _) {} #if !defined(BOOST_NO_RVALUE_REFERENCES) BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _)) : BOOST_PP_ENUM(N, FUSION_VECTOR_ARG_FWD, _) {} #endif BOOST_PP_CAT(vector_data, N)( BOOST_PP_ENUM_BINARY_PARAMS( N, typename detail::call_param::type _)) : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_MEMBER_INIT, _) {} BOOST_PP_CAT(vector_data, N)( BOOST_PP_CAT(vector_data, N) const& other) : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_COPY_INIT, _) {} #if !defined(BOOST_NO_RVALUE_REFERENCES) BOOST_PP_CAT(vector_data, N)( BOOST_PP_CAT(vector_data, N)&& other) : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_FWD, _) {} #endif BOOST_PP_CAT(vector_data, N)& operator=(BOOST_PP_CAT(vector_data, N) const& vec) { BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_ASSIGN, _) return *this; } template static BOOST_PP_CAT(vector_data, N) init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _) return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i)); } template static BOOST_PP_CAT(vector_data, N) init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _) return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i)); } BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_DECL, _) }; template struct BOOST_PP_CAT(vector, N) : BOOST_PP_CAT(vector_data, N) , sequence_base > { typedef BOOST_PP_CAT(vector, N) this_type; typedef BOOST_PP_CAT(vector_data, N) base_type; typedef mpl::BOOST_PP_CAT(vector, N) types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_ size; BOOST_PP_CAT(vector, N)() {} #if (N == 1) explicit #endif BOOST_PP_CAT(vector, N)( BOOST_PP_ENUM_BINARY_PARAMS( N, typename detail::call_param::type _)) : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {} #if !defined(BOOST_NO_RVALUE_REFERENCES) #if (N == 1) explicit #endif BOOST_PP_CAT(vector, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _)) : base_type(BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_FORWARD, _)) {} #endif #if !defined(BOOST_NO_RVALUE_REFERENCES) BOOST_PP_CAT(vector, N)(BOOST_PP_CAT(vector, N)&& rhs) : base_type(std::forward(rhs)) {} #endif template BOOST_PP_CAT(vector, N)( BOOST_PP_CAT(vector, N) const& vec) : base_type(BOOST_PP_ENUM_PARAMS(N, vec.m)) {} template BOOST_PP_CAT(vector, N)( Sequence const& seq #if (N == 1) , typename boost::disable_if >::type* /*dummy*/ = 0 #endif ) : base_type(base_type::init_from_sequence(seq)) {} template BOOST_PP_CAT(vector, N)( Sequence& seq #if (N == 1) , typename boost::disable_if >::type* /*dummy*/ = 0 #endif ) : base_type(base_type::init_from_sequence(seq)) {} template BOOST_PP_CAT(vector, N)& operator=(BOOST_PP_CAT(vector, N) const& vec) { BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_ASSIGN, _) return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _) BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_DEREF_MEMBER_ASSIGN, _) return *this; } #if !defined(BOOST_NO_RVALUE_REFERENCES) BOOST_PP_CAT(vector, N)& operator=(BOOST_PP_CAT(vector, N)&& vec) { BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_FORWARD, _) return *this; } #endif BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_AT_IMPL, _) template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; #undef N vector_n_chooser.hpp000444000765000024 740412161110642 30371 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_PP_IS_ITERATING #if !defined(FUSION_VECTOR_N_CHOOSER_07072005_1248) #define FUSION_VECTOR_N_CHOOSER_07072005_1248 #include // include vector0..N where N is FUSION_MAX_VECTOR_SIZE #include #if (FUSION_MAX_VECTOR_SIZE > 10) #include #endif #if (FUSION_MAX_VECTOR_SIZE > 20) #include #endif #if (FUSION_MAX_VECTOR_SIZE > 30) #include #endif #if (FUSION_MAX_VECTOR_SIZE > 40) #include #endif #include #include #include #include #include #include namespace boost { namespace fusion { struct void_; }} #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "preprocessed/vector_chooser" FUSION_MAX_VECTOR_SIZE_STR ".hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { namespace detail { template struct vector_n_chooser { typedef BOOST_PP_CAT(vector, FUSION_MAX_VECTOR_SIZE) type; }; template <> struct vector_n_chooser { typedef vector0<> type; }; #define BOOST_PP_FILENAME_1 \ #define BOOST_PP_ITERATION_LIMITS (1, BOOST_PP_DEC(FUSION_MAX_VECTOR_SIZE)) #include BOOST_PP_ITERATE() }}} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif /////////////////////////////////////////////////////////////////////////////// // // Preprocessor vertical repetition code // /////////////////////////////////////////////////////////////////////////////// #else // defined(BOOST_PP_IS_ITERATING) #define N BOOST_PP_ITERATION() template struct vector_n_chooser< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(FUSION_MAX_VECTOR_SIZE, N), void_ BOOST_PP_INTERCEPT)> { typedef BOOST_PP_CAT(vector, N) type; }; #undef N #endif // defined(BOOST_PP_IS_ITERATING) preprocessed000755000765000024 012161110700 26646 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detailvector.hpp000444000765000024 205112161110642 31021 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_VECTOR_SIZE <= 10 #include #elif FUSION_MAX_VECTOR_SIZE <= 20 #include #elif FUSION_MAX_VECTOR_SIZE <= 30 #include #elif FUSION_MAX_VECTOR_SIZE <= 40 #include #elif FUSION_MAX_VECTOR_SIZE <= 50 #include #else #error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" #endif vector10.hpp000444000765000024 17724312161110643 31243 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct vector_data1 { vector_data1() : m0() {} vector_data1( typename detail::call_param::type _0) : m0(_0) {} vector_data1( vector_data1 const& other) : m0(other.m0) {} vector_data1& operator=(vector_data1 const& vec) { this->m0 = vec.m0; return *this; } template static vector_data1 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); return vector_data1(*i0); } template static vector_data1 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); return vector_data1(*i0); } T0 m0; }; template struct vector1 : vector_data1 , sequence_base > { typedef vector1 this_type; typedef vector_data1 base_type; typedef mpl::vector1 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<1> size; vector1() {} explicit vector1( typename detail::call_param::type _0) : base_type(_0) {} template vector1( vector1 const& vec) : base_type(vec.m0) {} template vector1( Sequence const& seq , typename boost::disable_if >::type* = 0 ) : base_type(base_type::init_from_sequence(seq)) {} template vector1( Sequence& seq , typename boost::disable_if >::type* = 0 ) : base_type(base_type::init_from_sequence(seq)) {} template vector1& operator=(vector1 const& vec) { this->m0 = vec.m0; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); this->m0 = *i0; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data2 { vector_data2() : m0() , m1() {} vector_data2( typename detail::call_param::type _0 , typename detail::call_param::type _1) : m0(_0) , m1(_1) {} vector_data2( vector_data2 const& other) : m0(other.m0) , m1(other.m1) {} vector_data2& operator=(vector_data2 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; return *this; } template static vector_data2 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); return vector_data2(*i0 , *i1); } template static vector_data2 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); return vector_data2(*i0 , *i1); } T0 m0; T1 m1; }; template struct vector2 : vector_data2 , sequence_base > { typedef vector2 this_type; typedef vector_data2 base_type; typedef mpl::vector2 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<2> size; vector2() {} vector2( typename detail::call_param::type _0 , typename detail::call_param::type _1) : base_type(_0 , _1) {} template vector2( vector2 const& vec) : base_type(vec.m0 , vec.m1) {} template vector2( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector2( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector2& operator=(vector2 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); this->m0 = *i0; this->m1 = *i1; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data3 { vector_data3() : m0() , m1() , m2() {} vector_data3( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : m0(_0) , m1(_1) , m2(_2) {} vector_data3( vector_data3 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) {} vector_data3& operator=(vector_data3 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; return *this; } template static vector_data3 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); return vector_data3(*i0 , *i1 , *i2); } template static vector_data3 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); return vector_data3(*i0 , *i1 , *i2); } T0 m0; T1 m1; T2 m2; }; template struct vector3 : vector_data3 , sequence_base > { typedef vector3 this_type; typedef vector_data3 base_type; typedef mpl::vector3 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<3> size; vector3() {} vector3( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : base_type(_0 , _1 , _2) {} template vector3( vector3 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2) {} template vector3( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector3( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector3& operator=(vector3 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data4 { vector_data4() : m0() , m1() , m2() , m3() {} vector_data4( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : m0(_0) , m1(_1) , m2(_2) , m3(_3) {} vector_data4( vector_data4 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) {} vector_data4& operator=(vector_data4 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; return *this; } template static vector_data4 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); return vector_data4(*i0 , *i1 , *i2 , *i3); } template static vector_data4 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); return vector_data4(*i0 , *i1 , *i2 , *i3); } T0 m0; T1 m1; T2 m2; T3 m3; }; template struct vector4 : vector_data4 , sequence_base > { typedef vector4 this_type; typedef vector_data4 base_type; typedef mpl::vector4 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<4> size; vector4() {} vector4( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : base_type(_0 , _1 , _2 , _3) {} template vector4( vector4 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3) {} template vector4( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector4( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector4& operator=(vector4 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data5 { vector_data5() : m0() , m1() , m2() , m3() , m4() {} vector_data5( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) {} vector_data5( vector_data5 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) {} vector_data5& operator=(vector_data5 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; return *this; } template static vector_data5 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); return vector_data5(*i0 , *i1 , *i2 , *i3 , *i4); } template static vector_data5 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); return vector_data5(*i0 , *i1 , *i2 , *i3 , *i4); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; }; template struct vector5 : vector_data5 , sequence_base > { typedef vector5 this_type; typedef vector_data5 base_type; typedef mpl::vector5 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<5> size; vector5() {} vector5( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : base_type(_0 , _1 , _2 , _3 , _4) {} template vector5( vector5 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4) {} template vector5( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector5( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector5& operator=(vector5 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data6 { vector_data6() : m0() , m1() , m2() , m3() , m4() , m5() {} vector_data6( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) {} vector_data6( vector_data6 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) {} vector_data6& operator=(vector_data6 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; return *this; } template static vector_data6 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); return vector_data6(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); } template static vector_data6 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); return vector_data6(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; }; template struct vector6 : vector_data6 , sequence_base > { typedef vector6 this_type; typedef vector_data6 base_type; typedef mpl::vector6 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<6> size; vector6() {} vector6( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} template vector6( vector6 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5) {} template vector6( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector6( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector6& operator=(vector6 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data7 { vector_data7() : m0() , m1() , m2() , m3() , m4() , m5() , m6() {} vector_data7( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) {} vector_data7( vector_data7 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) {} vector_data7& operator=(vector_data7 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; return *this; } template static vector_data7 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); return vector_data7(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); } template static vector_data7 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); return vector_data7(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; }; template struct vector7 : vector_data7 , sequence_base > { typedef vector7 this_type; typedef vector_data7 base_type; typedef mpl::vector7 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<7> size; vector7() {} vector7( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} template vector7( vector7 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6) {} template vector7( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector7( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector7& operator=(vector7 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data8 { vector_data8() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() {} vector_data8( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) {} vector_data8( vector_data8 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) {} vector_data8& operator=(vector_data8 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; return *this; } template static vector_data8 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); return vector_data8(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); } template static vector_data8 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); return vector_data8(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; }; template struct vector8 : vector_data8 , sequence_base > { typedef vector8 this_type; typedef vector_data8 base_type; typedef mpl::vector8 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<8> size; vector8() {} vector8( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} template vector8( vector8 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7) {} template vector8( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector8( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector8& operator=(vector8 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data9 { vector_data9() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() {} vector_data9( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) {} vector_data9( vector_data9 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) {} vector_data9& operator=(vector_data9 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; return *this; } template static vector_data9 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); return vector_data9(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); } template static vector_data9 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); return vector_data9(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; }; template struct vector9 : vector_data9 , sequence_base > { typedef vector9 this_type; typedef vector_data9 base_type; typedef mpl::vector9 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<9> size; vector9() {} vector9( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} template vector9( vector9 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8) {} template vector9( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector9( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector9& operator=(vector9 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data10 { vector_data10() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() {} vector_data10( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) {} vector_data10( vector_data10 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) {} vector_data10& operator=(vector_data10 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; return *this; } template static vector_data10 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); return vector_data10(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); } template static vector_data10 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); return vector_data10(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; }; template struct vector10 : vector_data10 , sequence_base > { typedef vector10 this_type; typedef vector_data10 base_type; typedef mpl::vector10 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<10> size; vector10() {} vector10( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} template vector10( vector10 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9) {} template vector10( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector10( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector10& operator=(vector10 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; }} vector10_fwd.hpp000444000765000024 313112161110642 32022 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct vector1; template struct vector2; template struct vector3; template struct vector4; template struct vector5; template struct vector6; template struct vector7; template struct vector8; template struct vector9; template struct vector10; }} vector20.hpp000444000765000024 41637112161110613 31237 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; template struct vector_data11 { vector_data11() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() {} vector_data11( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) {} vector_data11( vector_data11 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) {} vector_data11& operator=(vector_data11 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; return *this; } template static vector_data11 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); return vector_data11(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); } template static vector_data11 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); return vector_data11(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; }; template struct vector11 : vector_data11 , sequence_base > { typedef vector11 this_type; typedef vector_data11 base_type; typedef mpl::vector11 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<11> size; vector11() {} vector11( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} template vector11( vector11 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10) {} template vector11( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector11( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector11& operator=(vector11 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data12 { vector_data12() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() {} vector_data12( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) {} vector_data12( vector_data12 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) {} vector_data12& operator=(vector_data12 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; return *this; } template static vector_data12 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); return vector_data12(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); } template static vector_data12 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); return vector_data12(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; }; template struct vector12 : vector_data12 , sequence_base > { typedef vector12 this_type; typedef vector_data12 base_type; typedef mpl::vector12 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<12> size; vector12() {} vector12( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} template vector12( vector12 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11) {} template vector12( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector12( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector12& operator=(vector12 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data13 { vector_data13() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() {} vector_data13( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) {} vector_data13( vector_data13 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) {} vector_data13& operator=(vector_data13 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; return *this; } template static vector_data13 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); return vector_data13(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); } template static vector_data13 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); return vector_data13(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; }; template struct vector13 : vector_data13 , sequence_base > { typedef vector13 this_type; typedef vector_data13 base_type; typedef mpl::vector13 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<13> size; vector13() {} vector13( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} template vector13( vector13 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12) {} template vector13( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector13( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector13& operator=(vector13 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data14 { vector_data14() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() {} vector_data14( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) {} vector_data14( vector_data14 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) {} vector_data14& operator=(vector_data14 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; return *this; } template static vector_data14 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); return vector_data14(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); } template static vector_data14 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); return vector_data14(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; }; template struct vector14 : vector_data14 , sequence_base > { typedef vector14 this_type; typedef vector_data14 base_type; typedef mpl::vector14 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<14> size; vector14() {} vector14( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} template vector14( vector14 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13) {} template vector14( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector14( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector14& operator=(vector14 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data15 { vector_data15() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() {} vector_data15( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) {} vector_data15( vector_data15 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) {} vector_data15& operator=(vector_data15 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; return *this; } template static vector_data15 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); return vector_data15(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); } template static vector_data15 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); return vector_data15(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; }; template struct vector15 : vector_data15 , sequence_base > { typedef vector15 this_type; typedef vector_data15 base_type; typedef mpl::vector15 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<15> size; vector15() {} vector15( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} template vector15( vector15 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14) {} template vector15( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector15( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector15& operator=(vector15 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data16 { vector_data16() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() {} vector_data16( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) {} vector_data16( vector_data16 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) {} vector_data16& operator=(vector_data16 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; return *this; } template static vector_data16 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); return vector_data16(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); } template static vector_data16 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); return vector_data16(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; }; template struct vector16 : vector_data16 , sequence_base > { typedef vector16 this_type; typedef vector_data16 base_type; typedef mpl::vector16 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<16> size; vector16() {} vector16( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} template vector16( vector16 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15) {} template vector16( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector16( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector16& operator=(vector16 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data17 { vector_data17() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() {} vector_data17( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) {} vector_data17( vector_data17 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) {} vector_data17& operator=(vector_data17 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; return *this; } template static vector_data17 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); return vector_data17(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); } template static vector_data17 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); return vector_data17(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; }; template struct vector17 : vector_data17 , sequence_base > { typedef vector17 this_type; typedef vector_data17 base_type; typedef mpl::vector17 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<17> size; vector17() {} vector17( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} template vector17( vector17 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16) {} template vector17( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector17( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector17& operator=(vector17 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data18 { vector_data18() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() {} vector_data18( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) {} vector_data18( vector_data18 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) {} vector_data18& operator=(vector_data18 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; return *this; } template static vector_data18 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); return vector_data18(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); } template static vector_data18 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); return vector_data18(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; }; template struct vector18 : vector_data18 , sequence_base > { typedef vector18 this_type; typedef vector_data18 base_type; typedef mpl::vector18 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<18> size; vector18() {} vector18( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} template vector18( vector18 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17) {} template vector18( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector18( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector18& operator=(vector18 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data19 { vector_data19() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() {} vector_data19( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) {} vector_data19( vector_data19 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) {} vector_data19& operator=(vector_data19 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; return *this; } template static vector_data19 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); return vector_data19(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); } template static vector_data19 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); return vector_data19(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; }; template struct vector19 : vector_data19 , sequence_base > { typedef vector19 this_type; typedef vector_data19 base_type; typedef mpl::vector19 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<19> size; vector19() {} vector19( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} template vector19( vector19 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18) {} template vector19( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector19( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector19& operator=(vector19 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data20 { vector_data20() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() {} vector_data20( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) {} vector_data20( vector_data20 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) {} vector_data20& operator=(vector_data20 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; return *this; } template static vector_data20 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); return vector_data20(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); } template static vector_data20 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); return vector_data20(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; }; template struct vector20 : vector_data20 , sequence_base > { typedef vector20 this_type; typedef vector_data20 base_type; typedef mpl::vector20 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<20> size; vector20() {} vector20( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} template vector20( vector20 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19) {} template vector20( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector20( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector20& operator=(vector20 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; }} vector20_fwd.hpp000444000765000024 602112161110640 32022 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct vector11; template struct vector12; template struct vector13; template struct vector14; template struct vector15; template struct vector16; template struct vector17; template struct vector18; template struct vector19; template struct vector20; }} vector30.hpp000444000765000024 64211112161110612 31230 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; template struct vector_data21 { vector_data21() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() {} vector_data21( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) {} vector_data21( vector_data21 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) {} vector_data21& operator=(vector_data21 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; return *this; } template static vector_data21 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); return vector_data21(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); } template static vector_data21 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); return vector_data21(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; }; template struct vector21 : vector_data21 , sequence_base > { typedef vector21 this_type; typedef vector_data21 base_type; typedef mpl::vector21 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<21> size; vector21() {} vector21( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} template vector21( vector21 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20) {} template vector21( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector21( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector21& operator=(vector21 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data22 { vector_data22() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() {} vector_data22( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) {} vector_data22( vector_data22 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) {} vector_data22& operator=(vector_data22 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; return *this; } template static vector_data22 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); return vector_data22(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); } template static vector_data22 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); return vector_data22(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; }; template struct vector22 : vector_data22 , sequence_base > { typedef vector22 this_type; typedef vector_data22 base_type; typedef mpl::vector22 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<22> size; vector22() {} vector22( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} template vector22( vector22 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21) {} template vector22( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector22( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector22& operator=(vector22 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data23 { vector_data23() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() {} vector_data23( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) {} vector_data23( vector_data23 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) {} vector_data23& operator=(vector_data23 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; return *this; } template static vector_data23 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); return vector_data23(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); } template static vector_data23 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); return vector_data23(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; }; template struct vector23 : vector_data23 , sequence_base > { typedef vector23 this_type; typedef vector_data23 base_type; typedef mpl::vector23 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<23> size; vector23() {} vector23( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} template vector23( vector23 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22) {} template vector23( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector23( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector23& operator=(vector23 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data24 { vector_data24() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() {} vector_data24( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) {} vector_data24( vector_data24 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) {} vector_data24& operator=(vector_data24 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; return *this; } template static vector_data24 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); return vector_data24(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); } template static vector_data24 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); return vector_data24(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; }; template struct vector24 : vector_data24 , sequence_base > { typedef vector24 this_type; typedef vector_data24 base_type; typedef mpl::vector24 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<24> size; vector24() {} vector24( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} template vector24( vector24 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23) {} template vector24( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector24( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector24& operator=(vector24 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data25 { vector_data25() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() {} vector_data25( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) {} vector_data25( vector_data25 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) {} vector_data25& operator=(vector_data25 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; return *this; } template static vector_data25 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); return vector_data25(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); } template static vector_data25 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); return vector_data25(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; }; template struct vector25 : vector_data25 , sequence_base > { typedef vector25 this_type; typedef vector_data25 base_type; typedef mpl::vector25 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<25> size; vector25() {} vector25( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} template vector25( vector25 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24) {} template vector25( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector25( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector25& operator=(vector25 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data26 { vector_data26() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() {} vector_data26( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) {} vector_data26( vector_data26 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) {} vector_data26& operator=(vector_data26 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; return *this; } template static vector_data26 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); return vector_data26(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); } template static vector_data26 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); return vector_data26(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; }; template struct vector26 : vector_data26 , sequence_base > { typedef vector26 this_type; typedef vector_data26 base_type; typedef mpl::vector26 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<26> size; vector26() {} vector26( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} template vector26( vector26 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25) {} template vector26( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector26( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector26& operator=(vector26 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data27 { vector_data27() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() {} vector_data27( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) {} vector_data27( vector_data27 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) {} vector_data27& operator=(vector_data27 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; return *this; } template static vector_data27 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); return vector_data27(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); } template static vector_data27 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); return vector_data27(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; }; template struct vector27 : vector_data27 , sequence_base > { typedef vector27 this_type; typedef vector_data27 base_type; typedef mpl::vector27 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<27> size; vector27() {} vector27( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} template vector27( vector27 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26) {} template vector27( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector27( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector27& operator=(vector27 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data28 { vector_data28() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() {} vector_data28( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) {} vector_data28( vector_data28 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) {} vector_data28& operator=(vector_data28 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; return *this; } template static vector_data28 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); return vector_data28(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); } template static vector_data28 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); return vector_data28(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; }; template struct vector28 : vector_data28 , sequence_base > { typedef vector28 this_type; typedef vector_data28 base_type; typedef mpl::vector28 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<28> size; vector28() {} vector28( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} template vector28( vector28 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27) {} template vector28( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector28( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector28& operator=(vector28 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data29 { vector_data29() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() {} vector_data29( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) {} vector_data29( vector_data29 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) {} vector_data29& operator=(vector_data29 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; return *this; } template static vector_data29 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); return vector_data29(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); } template static vector_data29 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); return vector_data29(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; }; template struct vector29 : vector_data29 , sequence_base > { typedef vector29 this_type; typedef vector_data29 base_type; typedef mpl::vector29 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<29> size; vector29() {} vector29( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} template vector29( vector29 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28) {} template vector29( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector29( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector29& operator=(vector29 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data30 { vector_data30() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() {} vector_data30( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) {} vector_data30( vector_data30 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) {} vector_data30& operator=(vector_data30 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; return *this; } template static vector_data30 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); return vector_data30(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); } template static vector_data30 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); return vector_data30(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; }; template struct vector30 : vector_data30 , sequence_base > { typedef vector30 this_type; typedef vector_data30 base_type; typedef mpl::vector30 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<30> size; vector30() {} vector30( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} template vector30( vector30 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29) {} template vector30( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector30( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector30& operator=(vector30 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; }} vector30_fwd.hpp000444000765000024 1075512161110666 32064 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct vector21; template struct vector22; template struct vector23; template struct vector24; template struct vector25; template struct vector26; template struct vector27; template struct vector28; template struct vector29; template struct vector30; }} vector40.hpp000444000765000024 106563112161110676 31272 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; template struct vector_data31 { vector_data31() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() {} vector_data31( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) {} vector_data31( vector_data31 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) {} vector_data31& operator=(vector_data31 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; return *this; } template static vector_data31 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); return vector_data31(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); } template static vector_data31 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); return vector_data31(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; }; template struct vector31 : vector_data31 , sequence_base > { typedef vector31 this_type; typedef vector_data31 base_type; typedef mpl::vector31 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<31> size; vector31() {} vector31( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} template vector31( vector31 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30) {} template vector31( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector31( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector31& operator=(vector31 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data32 { vector_data32() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() {} vector_data32( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) {} vector_data32( vector_data32 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) {} vector_data32& operator=(vector_data32 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; return *this; } template static vector_data32 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); return vector_data32(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); } template static vector_data32 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); return vector_data32(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; }; template struct vector32 : vector_data32 , sequence_base > { typedef vector32 this_type; typedef vector_data32 base_type; typedef mpl::vector32 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<32> size; vector32() {} vector32( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} template vector32( vector32 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31) {} template vector32( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector32( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector32& operator=(vector32 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data33 { vector_data33() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() {} vector_data33( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) {} vector_data33( vector_data33 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) {} vector_data33& operator=(vector_data33 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; return *this; } template static vector_data33 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); return vector_data33(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); } template static vector_data33 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); return vector_data33(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; }; template struct vector33 : vector_data33 , sequence_base > { typedef vector33 this_type; typedef vector_data33 base_type; typedef mpl::vector33 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<33> size; vector33() {} vector33( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} template vector33( vector33 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32) {} template vector33( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector33( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector33& operator=(vector33 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data34 { vector_data34() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() {} vector_data34( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) {} vector_data34( vector_data34 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) {} vector_data34& operator=(vector_data34 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; return *this; } template static vector_data34 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); return vector_data34(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); } template static vector_data34 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); return vector_data34(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; }; template struct vector34 : vector_data34 , sequence_base > { typedef vector34 this_type; typedef vector_data34 base_type; typedef mpl::vector34 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<34> size; vector34() {} vector34( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} template vector34( vector34 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33) {} template vector34( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector34( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector34& operator=(vector34 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data35 { vector_data35() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() {} vector_data35( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) {} vector_data35( vector_data35 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) {} vector_data35& operator=(vector_data35 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; return *this; } template static vector_data35 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); return vector_data35(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); } template static vector_data35 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); return vector_data35(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; }; template struct vector35 : vector_data35 , sequence_base > { typedef vector35 this_type; typedef vector_data35 base_type; typedef mpl::vector35 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<35> size; vector35() {} vector35( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} template vector35( vector35 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34) {} template vector35( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector35( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector35& operator=(vector35 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data36 { vector_data36() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() {} vector_data36( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) {} vector_data36( vector_data36 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) {} vector_data36& operator=(vector_data36 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; return *this; } template static vector_data36 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); return vector_data36(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); } template static vector_data36 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); return vector_data36(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; }; template struct vector36 : vector_data36 , sequence_base > { typedef vector36 this_type; typedef vector_data36 base_type; typedef mpl::vector36 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<36> size; vector36() {} vector36( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} template vector36( vector36 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35) {} template vector36( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector36( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector36& operator=(vector36 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data37 { vector_data37() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() {} vector_data37( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) {} vector_data37( vector_data37 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) {} vector_data37& operator=(vector_data37 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; return *this; } template static vector_data37 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); return vector_data37(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); } template static vector_data37 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); return vector_data37(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; }; template struct vector37 : vector_data37 , sequence_base > { typedef vector37 this_type; typedef vector_data37 base_type; typedef mpl::vector37 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<37> size; vector37() {} vector37( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} template vector37( vector37 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36) {} template vector37( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector37( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector37& operator=(vector37 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data38 { vector_data38() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() {} vector_data38( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) {} vector_data38( vector_data38 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) {} vector_data38& operator=(vector_data38 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; return *this; } template static vector_data38 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); return vector_data38(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); } template static vector_data38 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); return vector_data38(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; }; template struct vector38 : vector_data38 , sequence_base > { typedef vector38 this_type; typedef vector_data38 base_type; typedef mpl::vector38 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<38> size; vector38() {} vector38( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} template vector38( vector38 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37) {} template vector38( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector38( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector38& operator=(vector38 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data39 { vector_data39() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() {} vector_data39( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) {} vector_data39( vector_data39 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) {} vector_data39& operator=(vector_data39 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; return *this; } template static vector_data39 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); return vector_data39(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); } template static vector_data39 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); return vector_data39(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; }; template struct vector39 : vector_data39 , sequence_base > { typedef vector39 this_type; typedef vector_data39 base_type; typedef mpl::vector39 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<39> size; vector39() {} vector39( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} template vector39( vector39 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38) {} template vector39( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector39( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector39& operator=(vector39 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data40 { vector_data40() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() {} vector_data40( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) {} vector_data40( vector_data40 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) {} vector_data40& operator=(vector_data40 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; return *this; } template static vector_data40 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); return vector_data40(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); } template static vector_data40 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); return vector_data40(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; }; template struct vector40 : vector_data40 , sequence_base > { typedef vector40 this_type; typedef vector_data40 base_type; typedef mpl::vector40 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<40> size; vector40() {} vector40( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} template vector40( vector40 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39) {} template vector40( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector40( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector40& operator=(vector40 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; }} vector40_fwd.hpp000444000765000024 1371112161110674 32057 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct vector31; template struct vector32; template struct vector33; template struct vector34; template struct vector35; template struct vector36; template struct vector37; template struct vector38; template struct vector39; template struct vector40; }} vector50.hpp000444000765000024 131135112161110604 31253 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; template struct vector_data41 { vector_data41() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() {} vector_data41( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) {} vector_data41( vector_data41 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) {} vector_data41& operator=(vector_data41 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; return *this; } template static vector_data41 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); return vector_data41(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40); } template static vector_data41 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); return vector_data41(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; }; template struct vector41 : vector_data41 , sequence_base > { typedef vector41 this_type; typedef vector_data41 base_type; typedef mpl::vector41 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<41> size; vector41() {} vector41( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {} template vector41( vector41 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40) {} template vector41( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector41( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector41& operator=(vector41 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data42 { vector_data42() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() {} vector_data42( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) {} vector_data42( vector_data42 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) {} vector_data42& operator=(vector_data42 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; return *this; } template static vector_data42 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); return vector_data42(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41); } template static vector_data42 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); return vector_data42(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; }; template struct vector42 : vector_data42 , sequence_base > { typedef vector42 this_type; typedef vector_data42 base_type; typedef mpl::vector42 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<42> size; vector42() {} vector42( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {} template vector42( vector42 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41) {} template vector42( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector42( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector42& operator=(vector42 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data43 { vector_data43() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() {} vector_data43( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) {} vector_data43( vector_data43 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) {} vector_data43& operator=(vector_data43 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; return *this; } template static vector_data43 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); return vector_data43(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42); } template static vector_data43 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); return vector_data43(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; }; template struct vector43 : vector_data43 , sequence_base > { typedef vector43 this_type; typedef vector_data43 base_type; typedef mpl::vector43 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<43> size; vector43() {} vector43( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {} template vector43( vector43 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42) {} template vector43( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector43( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector43& operator=(vector43 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data44 { vector_data44() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() {} vector_data44( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) {} vector_data44( vector_data44 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) {} vector_data44& operator=(vector_data44 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; return *this; } template static vector_data44 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); return vector_data44(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43); } template static vector_data44 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); return vector_data44(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; }; template struct vector44 : vector_data44 , sequence_base > { typedef vector44 this_type; typedef vector_data44 base_type; typedef mpl::vector44 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<44> size; vector44() {} vector44( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {} template vector44( vector44 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43) {} template vector44( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector44( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector44& operator=(vector44 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data45 { vector_data45() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() {} vector_data45( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) {} vector_data45( vector_data45 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) {} vector_data45& operator=(vector_data45 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; return *this; } template static vector_data45 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); return vector_data45(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44); } template static vector_data45 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); return vector_data45(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; }; template struct vector45 : vector_data45 , sequence_base > { typedef vector45 this_type; typedef vector_data45 base_type; typedef mpl::vector45 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<45> size; vector45() {} vector45( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {} template vector45( vector45 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44) {} template vector45( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector45( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector45& operator=(vector45 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data46 { vector_data46() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() {} vector_data46( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) {} vector_data46( vector_data46 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) {} vector_data46& operator=(vector_data46 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; return *this; } template static vector_data46 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); return vector_data46(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45); } template static vector_data46 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); return vector_data46(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; }; template struct vector46 : vector_data46 , sequence_base > { typedef vector46 this_type; typedef vector_data46 base_type; typedef mpl::vector46 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<46> size; vector46() {} vector46( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {} template vector46( vector46 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45) {} template vector46( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector46( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector46& operator=(vector46 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data47 { vector_data47() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() {} vector_data47( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) {} vector_data47( vector_data47 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) {} vector_data47& operator=(vector_data47 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; return *this; } template static vector_data47 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); return vector_data47(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46); } template static vector_data47 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); return vector_data47(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; T46 m46; }; template struct vector47 : vector_data47 , sequence_base > { typedef vector47 this_type; typedef vector_data47 base_type; typedef mpl::vector47 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<47> size; vector47() {} vector47( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {} template vector47( vector47 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46) {} template vector47( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector47( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector47& operator=(vector47 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference::type>::type at_impl(mpl::int_<46>) const { return this->m46; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data48 { vector_data48() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() {} vector_data48( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) {} vector_data48( vector_data48 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) {} vector_data48& operator=(vector_data48 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; return *this; } template static vector_data48 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); return vector_data48(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47); } template static vector_data48 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); return vector_data48(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; T46 m46; T47 m47; }; template struct vector48 : vector_data48 , sequence_base > { typedef vector48 this_type; typedef vector_data48 base_type; typedef mpl::vector48 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<48> size; vector48() {} vector48( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {} template vector48( vector48 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47) {} template vector48( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector48( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector48& operator=(vector48 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference::type>::type at_impl(mpl::int_<47>) const { return this->m47; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data49 { vector_data49() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() , m48() {} vector_data49( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) , m48(_48) {} vector_data49( vector_data49 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) , m48(other.m48) {} vector_data49& operator=(vector_data49 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; this->m48 = vec.m48; return *this; } template static vector_data49 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); return vector_data49(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48); } template static vector_data49 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); return vector_data49(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; T46 m46; T47 m47; T48 m48; }; template struct vector49 : vector_data49 , sequence_base > { typedef vector49 this_type; typedef vector_data49 base_type; typedef mpl::vector49 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<49> size; vector49() {} vector49( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {} template vector49( vector49 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47 , vec.m48) {} template vector49( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector49( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector49& operator=(vector49 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; this->m48 = vec.m48; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47; this->m48 = *i48; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference::type>::type at_impl(mpl::int_<47>) const { return this->m47; } typename add_reference::type at_impl(mpl::int_<48>) { return this->m48; } typename add_reference::type>::type at_impl(mpl::int_<48>) const { return this->m48; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; template struct vector_data50 { vector_data50() : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() , m48() , m49() {} vector_data50( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) , m48(_48) , m49(_49) {} vector_data50( vector_data50 const& other) : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) , m48(other.m48) , m49(other.m49) {} vector_data50& operator=(vector_data50 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; this->m48 = vec.m48; this->m49 = vec.m49; return *this; } template static vector_data50 init_from_sequence(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); typedef typename result_of::next< I48>::type I49; I49 i49 = fusion::next(i48); return vector_data50(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49); } template static vector_data50 init_from_sequence(Sequence& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); typedef typename result_of::next< I48>::type I49; I49 i49 = fusion::next(i48); return vector_data50(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49); } T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; T46 m46; T47 m47; T48 m48; T49 m49; }; template struct vector50 : vector_data50 , sequence_base > { typedef vector50 this_type; typedef vector_data50 base_type; typedef mpl::vector50 types; typedef vector_tag fusion_tag; typedef fusion_sequence_tag tag; typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<50> size; vector50() {} vector50( typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {} template vector50( vector50 const& vec) : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47 , vec.m48 , vec.m49) {} template vector50( Sequence const& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector50( Sequence& seq ) : base_type(base_type::init_from_sequence(seq)) {} template vector50& operator=(vector50 const& vec) { this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; this->m48 = vec.m48; this->m49 = vec.m49; return *this; } template typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); typedef typename result_of::next< I48>::type I49; I49 i49 = fusion::next(i48); this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47; this->m48 = *i48; this->m49 = *i49; return *this; } typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference::type>::type at_impl(mpl::int_<47>) const { return this->m47; } typename add_reference::type at_impl(mpl::int_<48>) { return this->m48; } typename add_reference::type>::type at_impl(mpl::int_<48>) const { return this->m48; } typename add_reference::type at_impl(mpl::int_<49>) { return this->m49; } typename add_reference::type>::type at_impl(mpl::int_<49>) const { return this->m49; } template typename add_reference::type>::type at_impl(I) { return this->at_impl(mpl::int_()); } template typename add_reference::type>::type>::type at_impl(I) const { return this->at_impl(mpl::int_()); } }; }} vector50_fwd.hpp000444000765000024 1664512161110604 32062 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2011 Eric Niebler Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct vector41; template struct vector42; template struct vector43; template struct vector44; template struct vector45; template struct vector46; template struct vector47; template struct vector48; template struct vector49; template struct vector50; }} vector_chooser.hpp000444000765000024 211212161110667 32550 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_VECTOR_SIZE <= 10 #include #elif FUSION_MAX_VECTOR_SIZE <= 20 #include #elif FUSION_MAX_VECTOR_SIZE <= 30 #include #elif FUSION_MAX_VECTOR_SIZE <= 40 #include #elif FUSION_MAX_VECTOR_SIZE <= 50 #include #else #error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" #endif vector_chooser10.hpp000444000765000024 637712161110622 32721 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { namespace detail { template struct vector_n_chooser { typedef vector10 type; }; template <> struct vector_n_chooser { typedef vector0<> type; }; template struct vector_n_chooser< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector1 type; }; template struct vector_n_chooser< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector2 type; }; template struct vector_n_chooser< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector3 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector4 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_> { typedef vector5 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_> { typedef vector6 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_> { typedef vector7 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_> { typedef vector8 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_> { typedef vector9 type; }; }}} vector_chooser20.hpp000444000765000024 2236612161110635 32742 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { namespace detail { template struct vector_n_chooser { typedef vector20 type; }; template <> struct vector_n_chooser { typedef vector0<> type; }; template struct vector_n_chooser< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector1 type; }; template struct vector_n_chooser< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector2 type; }; template struct vector_n_chooser< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector3 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector4 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector5 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector6 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector7 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector8 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector9 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector10 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector11 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector12 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector13 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector14 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_> { typedef vector15 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_> { typedef vector16 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_> { typedef vector17 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_> { typedef vector18 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_> { typedef vector19 type; }; }}} vector_chooser30.hpp000444000765000024 4523112161110675 32743 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { namespace detail { template struct vector_n_chooser { typedef vector30 type; }; template <> struct vector_n_chooser { typedef vector0<> type; }; template struct vector_n_chooser< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector1 type; }; template struct vector_n_chooser< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector2 type; }; template struct vector_n_chooser< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector3 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector4 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector5 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector6 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector7 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector8 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector9 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector10 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector11 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector12 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector13 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector14 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector15 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector16 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector17 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector18 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector19 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector20 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector21 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector22 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector23 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector24 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_> { typedef vector25 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_> { typedef vector26 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_> { typedef vector27 type; }; template struct vector_n_chooser< 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 , void_ , void_> { typedef vector28 type; }; template struct vector_n_chooser< 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 , void_> { typedef vector29 type; }; }}} vector_chooser40.hpp000444000765000024 7675012161110603 32745 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { namespace detail { template struct vector_n_chooser { typedef vector40 type; }; template <> struct vector_n_chooser { typedef vector0<> type; }; template struct vector_n_chooser< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector1 type; }; template struct vector_n_chooser< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector2 type; }; template struct vector_n_chooser< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector3 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector4 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector5 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector6 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector7 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector8 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector9 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector10 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector11 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector12 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector13 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector14 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector15 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector16 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector17 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector18 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector19 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector20 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector21 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector22 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector23 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector24 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector25 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector26 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector27 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector28 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector29 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector30 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector31 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector32 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector33 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector34 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_> { typedef vector35 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_> { typedef vector36 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_> { typedef vector37 type; }; template struct vector_n_chooser< 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 , void_ , void_> { typedef vector38 type; }; template struct vector_n_chooser< 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 , void_> { typedef vector39 type; }; }}} vector_chooser50.hpp000444000765000024 13734312161110610 32760 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { namespace detail { template struct vector_n_chooser { typedef vector50 type; }; template <> struct vector_n_chooser { typedef vector0<> type; }; template struct vector_n_chooser< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector1 type; }; template struct vector_n_chooser< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector2 type; }; template struct vector_n_chooser< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector3 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector4 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector5 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector6 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector7 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector8 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector9 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector10 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector11 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector12 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector13 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector14 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector15 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector16 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector17 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector18 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector19 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector20 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector21 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector22 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector23 type; }; template struct vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector24 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector25 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector26 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector27 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector28 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector29 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector30 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector31 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector32 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector33 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector34 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector35 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector36 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector37 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector38 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector39 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector40 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector41 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector42 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector43 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_ , void_> { typedef vector44 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_ , void_> { typedef vector45 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_ , void_> { typedef vector46 type; }; template struct vector_n_chooser< 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 , void_ , void_ , void_> { typedef vector47 type; }; template struct vector_n_chooser< 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 , void_ , void_> { typedef vector48 type; }; template struct vector_n_chooser< 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 , void_> { typedef vector49 type; }; }}} vector_fwd.hpp000444000765000024 207512161110661 31670 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_VECTOR_SIZE <= 10 #include #elif FUSION_MAX_VECTOR_SIZE <= 20 #include #elif FUSION_MAX_VECTOR_SIZE <= 30 #include #elif FUSION_MAX_VECTOR_SIZE <= 40 #include #elif FUSION_MAX_VECTOR_SIZE <= 50 #include #else #error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" #endif vvector10.hpp000444000765000024 1472712161110675 31413 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct fusion_sequence_tag; template struct vector : sequence_base > { private: typedef typename detail::vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type vector_n; template friend struct vector; public: typedef typename vector_n::types types; typedef typename vector_n::fusion_tag fusion_tag; typedef typename vector_n::tag tag; typedef typename vector_n::size size; typedef typename vector_n::category category; typedef typename vector_n::is_view is_view; vector() : vec() {} template vector(vector const& rhs) : vec(rhs.vec) {} vector(vector const& rhs) : vec(rhs.vec) {} template vector(Sequence const& rhs) : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} explicit vector(typename detail::call_param::type _0) : vec(_0) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) : vec(_0 , _1) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : vec(_0 , _1 , _2) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : vec(_0 , _1 , _2 , _3) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : vec(_0 , _1 , _2 , _3 , _4) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : vec(_0 , _1 , _2 , _3 , _4 , _5) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} template vector& operator=(vector const& rhs) { vec = rhs.vec; return *this; } template vector& operator=(T const& rhs) { vec = rhs; return *this; } template typename add_reference< typename mpl::at_c::type >::type at_impl(mpl::int_ index) { return vec.at_impl(index); } template typename add_reference< typename add_const< typename mpl::at_c::type >::type >::type at_impl(mpl::int_ index) const { return vec.at_impl(index); } template typename add_reference< typename mpl::at::type >::type at_impl(I ) { return vec.at_impl(mpl::int_()); } template typename add_reference< typename add_const< typename mpl::at::type >::type >::type at_impl(I ) const { return vec.at_impl(mpl::int_()); } private: BOOST_FUSION_VECTOR_CTOR_HELPER() vector_n vec; }; }} vvector10_fwd.hpp000444000765000024 135612161110653 32221 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ > struct vector; }} vvector20.hpp000444000765000024 3620712161110667 31412 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct fusion_sequence_tag; template struct vector : sequence_base > { private: typedef typename detail::vector_n_chooser< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type vector_n; template friend struct vector; public: typedef typename vector_n::types types; typedef typename vector_n::fusion_tag fusion_tag; typedef typename vector_n::tag tag; typedef typename vector_n::size size; typedef typename vector_n::category category; typedef typename vector_n::is_view is_view; vector() : vec() {} template vector(vector const& rhs) : vec(rhs.vec) {} vector(vector const& rhs) : vec(rhs.vec) {} template vector(Sequence const& rhs) : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} explicit vector(typename detail::call_param::type _0) : vec(_0) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) : vec(_0 , _1) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : vec(_0 , _1 , _2) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : vec(_0 , _1 , _2 , _3) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : vec(_0 , _1 , _2 , _3 , _4) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : vec(_0 , _1 , _2 , _3 , _4 , _5) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} template vector& operator=(vector const& rhs) { vec = rhs.vec; return *this; } template vector& operator=(T const& rhs) { vec = rhs; return *this; } template typename add_reference< typename mpl::at_c::type >::type at_impl(mpl::int_ index) { return vec.at_impl(index); } template typename add_reference< typename add_const< typename mpl::at_c::type >::type >::type at_impl(mpl::int_ index) const { return vec.at_impl(index); } template typename add_reference< typename mpl::at::type >::type at_impl(I ) { return vec.at_impl(mpl::int_()); } template typename add_reference< typename add_const< typename mpl::at::type >::type >::type at_impl(I ) const { return vec.at_impl(mpl::int_()); } private: BOOST_FUSION_VECTOR_CTOR_HELPER() vector_n vec; }; }} vvector20_fwd.hpp000444000765000024 172412161110654 32222 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ > struct vector; }} vvector30.hpp000444000765000024 7160712161110600 31401 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct fusion_sequence_tag; template struct vector : sequence_base > { private: typedef typename detail::vector_n_chooser< 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>::type vector_n; template friend struct vector; public: typedef typename vector_n::types types; typedef typename vector_n::fusion_tag fusion_tag; typedef typename vector_n::tag tag; typedef typename vector_n::size size; typedef typename vector_n::category category; typedef typename vector_n::is_view is_view; vector() : vec() {} template vector(vector const& rhs) : vec(rhs.vec) {} vector(vector const& rhs) : vec(rhs.vec) {} template vector(Sequence const& rhs) : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} explicit vector(typename detail::call_param::type _0) : vec(_0) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) : vec(_0 , _1) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : vec(_0 , _1 , _2) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : vec(_0 , _1 , _2 , _3) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : vec(_0 , _1 , _2 , _3 , _4) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : vec(_0 , _1 , _2 , _3 , _4 , _5) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} template vector& operator=(vector const& rhs) { vec = rhs.vec; return *this; } template vector& operator=(T const& rhs) { vec = rhs; return *this; } template typename add_reference< typename mpl::at_c::type >::type at_impl(mpl::int_ index) { return vec.at_impl(index); } template typename add_reference< typename add_const< typename mpl::at_c::type >::type >::type at_impl(mpl::int_ index) const { return vec.at_impl(index); } template typename add_reference< typename mpl::at::type >::type at_impl(I ) { return vec.at_impl(mpl::int_()); } template typename add_reference< typename add_const< typename mpl::at::type >::type >::type at_impl(I ) const { return vec.at_impl(mpl::int_()); } private: BOOST_FUSION_VECTOR_CTOR_HELPER() vector_n vec; }; }} vvector30_fwd.hpp000444000765000024 227212161110637 32223 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ > struct vector; }} vvector40.hpp000444000765000024 13732712161110612 31427 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct fusion_sequence_tag; template struct vector : sequence_base > { private: typedef typename detail::vector_n_chooser< 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>::type vector_n; template friend struct vector; public: typedef typename vector_n::types types; typedef typename vector_n::fusion_tag fusion_tag; typedef typename vector_n::tag tag; typedef typename vector_n::size size; typedef typename vector_n::category category; typedef typename vector_n::is_view is_view; vector() : vec() {} template vector(vector const& rhs) : vec(rhs.vec) {} vector(vector const& rhs) : vec(rhs.vec) {} template vector(Sequence const& rhs) : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} explicit vector(typename detail::call_param::type _0) : vec(_0) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) : vec(_0 , _1) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : vec(_0 , _1 , _2) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : vec(_0 , _1 , _2 , _3) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : vec(_0 , _1 , _2 , _3 , _4) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : vec(_0 , _1 , _2 , _3 , _4 , _5) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} template vector& operator=(vector const& rhs) { vec = rhs.vec; return *this; } template vector& operator=(T const& rhs) { vec = rhs; return *this; } template typename add_reference< typename mpl::at_c::type >::type at_impl(mpl::int_ index) { return vec.at_impl(index); } template typename add_reference< typename add_const< typename mpl::at_c::type >::type >::type at_impl(mpl::int_ index) const { return vec.at_impl(index); } template typename add_reference< typename mpl::at::type >::type at_impl(I ) { return vec.at_impl(mpl::int_()); } template typename add_reference< typename add_const< typename mpl::at::type >::type >::type at_impl(I ) const { return vec.at_impl(mpl::int_()); } private: BOOST_FUSION_VECTOR_CTOR_HELPER() vector_n vec; }; }} vvector40_fwd.hpp000444000765000024 264012161110650 32216 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ > struct vector; }} vvector50.hpp000444000765000024 21716712161110616 31435 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; struct fusion_sequence_tag; template struct vector : sequence_base > { private: typedef typename detail::vector_n_chooser< 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 , T49>::type vector_n; template friend struct vector; public: typedef typename vector_n::types types; typedef typename vector_n::fusion_tag fusion_tag; typedef typename vector_n::tag tag; typedef typename vector_n::size size; typedef typename vector_n::category category; typedef typename vector_n::is_view is_view; vector() : vec() {} template vector(vector const& rhs) : vec(rhs.vec) {} vector(vector const& rhs) : vec(rhs.vec) {} template vector(Sequence const& rhs) : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} explicit vector(typename detail::call_param::type _0) : vec(_0) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) : vec(_0 , _1) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : vec(_0 , _1 , _2) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : vec(_0 , _1 , _2 , _3) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : vec(_0 , _1 , _2 , _3 , _4) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : vec(_0 , _1 , _2 , _3 , _4 , _5) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {} vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {} template vector& operator=(vector const& rhs) { vec = rhs.vec; return *this; } template vector& operator=(T const& rhs) { vec = rhs; return *this; } template typename add_reference< typename mpl::at_c::type >::type at_impl(mpl::int_ index) { return vec.at_impl(index); } template typename add_reference< typename add_const< typename mpl::at_c::type >::type >::type at_impl(mpl::int_ index) const { return vec.at_impl(index); } template typename add_reference< typename mpl::at::type >::type at_impl(I ) { return vec.at_impl(mpl::int_()); } template typename add_reference< typename add_const< typename mpl::at::type >::type >::type at_impl(I ) const { return vec.at_impl(mpl::int_()); } private: BOOST_FUSION_VECTOR_CTOR_HELPER() vector_n vec; }; }} vvector50_fwd.hpp000444000765000024 320612161110700 32212 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/container/vector/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ > struct vector; }} include000755000765000024 012161110677 21062 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusionadapt_struct_named.hpp000444000765000024 104512161110614 25560 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/include/*============================================================================= Copyright (c) 2010 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_INCLUDE_ADAPT_STRUCT_NAMED_HPP #define BOOST_FUSION_INCLUDE_ADAPT_STRUCT_NAMED_HPP #include #endif at.hpp000444000765000024 75212161110614 22307 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/include/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INCLUDE_AT) #define FUSION_INCLUDE_AT #include #endif front.hpp000444000765000024 76212161110615 23035 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/include/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INCLUDE_FRONT) #define FUSION_INCLUDE_FRONT #include #endif is_sequence.hpp000444000765000024 77212161110677 24221 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/include/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INCLUDE_IS_SEQUENCE) #define FUSION_INCLUDE_IS_SEQUENCE #include #endif size.hpp000444000765000024 75712161110607 22664 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/include/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INCLUDE_SIZE) #define FUSION_INCLUDE_SIZE #include #endif std_pair.hpp000444000765000024 76012161110633 23510 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/include/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INCLUDE_STD_PAIR) #define FUSION_INCLUDE_STD_PAIR #include #endif tag_of.hpp000444000765000024 75212161110676 23152 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/include/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INCLUDE_TAG_OF) #define FUSION_INCLUDE_TAG_OF #include #endif tuple.hpp000444000765000024 73712161110651 23040 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/include/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INCLUDE_TUPLE) #define FUSION_INCLUDE_TUPLE #include #endif iterator000755000765000024 012161110676 21267 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusionadvance.hpp000444000765000024 566412161110623 23541 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ADVANCE_09172005_1146) #define FUSION_ADVANCE_09172005_1146 #include #include #include #include #include #include namespace boost { namespace fusion { struct random_access_traversal_tag; // Special tags: struct iterator_facade_tag; // iterator facade tag struct boost_array_iterator_tag; // boost::array iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { template struct advance_impl { // default implementation template struct apply : mpl::if_c< (N::value > 0) , advance_detail::forward , advance_detail::backward >::type { BOOST_MPL_ASSERT_NOT((traits::is_random_access)); }; }; template <> struct advance_impl { template struct apply : Iterator::template advance {}; }; template <> struct advance_impl; template <> struct advance_impl; template <> struct advance_impl; } namespace result_of { template struct advance_c : extension::advance_impl::type>::template apply > {}; template struct advance : extension::advance_impl::type>::template apply {}; } template inline typename result_of::advance_c::type const advance_c(Iterator const& i) { return result_of::advance_c::call(i); } template inline typename result_of::advance::type const advance(Iterator const& i) { return result_of::advance::call(i); } }} // namespace boost::fusion #endif basic_iterator.hpp000444000765000024 735312161110645 25133 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ITERATOR_BASIC_ITERATOR_HPP #define BOOST_FUSION_ITERATOR_BASIC_ITERATOR_HPP #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace extension { template struct value_of_impl; template struct deref_impl; template struct value_of_data_impl; template struct key_of_impl; template struct deref_data_impl; } template struct basic_iterator : iterator_facade, Category> { typedef mpl::int_ index; typedef Seq seq_type; template struct value_of : extension::value_of_impl::template apply {}; template struct deref : extension::deref_impl::template apply {}; template struct value_of_data : extension::value_of_data_impl::template apply {}; template struct key_of : extension::key_of_impl::template apply {}; template struct deref_data : extension::deref_data_impl::template apply {}; template struct advance { typedef basic_iterator type; static type call(It const& it) { return type(*it.seq,0); } }; template struct next : advance > {}; template struct prior : advance > {}; template struct distance { typedef mpl::minus type; static type call(It1 const&, It2 const&) { return type(); } }; template struct equal_to : mpl::and_< is_same< typename remove_const::type , typename remove_const::type > , mpl::equal_to > {}; template basic_iterator(basic_iterator const& it) : seq(it.seq) {} basic_iterator(Seq& in_seq, int) : seq(&in_seq) {} template basic_iterator& operator=(basic_iterator const& it) { seq=it.seq; return *this; } Seq* seq; }; }} #endif deref.hpp000444000765000024 411312161110663 23215 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DEREF_05042005_1019) #define FUSION_DEREF_05042005_1019 #include #include namespace boost { namespace fusion { // Special tags: struct iterator_facade_tag; // iterator facade tag struct boost_array_iterator_tag; // boost::array iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { template struct deref_impl { template struct apply {}; }; template <> struct deref_impl { template struct apply : Iterator::template deref {}; }; template <> struct deref_impl; template <> struct deref_impl; template <> struct deref_impl; } namespace result_of { template struct deref : extension::deref_impl::type>:: template apply {}; } template typename result_of::deref::type deref(Iterator const& i) { typedef result_of::deref deref_meta; return deref_meta::call(i); } template typename result_of::deref::type operator*(iterator_base const& i) { return fusion::deref(i.cast()); } }} #endif deref_data.hpp000444000765000024 244612161110616 24213 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ITERATOR_DEREF_DATA_HPP #define BOOST_FUSION_ITERATOR_DEREF_DATA_HPP #include namespace boost { namespace fusion { struct iterator_facade_tag; namespace extension { template struct deref_data_impl; template <> struct deref_data_impl { template struct apply : It::template deref_data {}; }; } namespace result_of { template struct deref_data : extension::deref_data_impl::type>:: template apply {}; } template typename result_of::deref_data::type deref_data(It const& it) { return result_of::deref_data::call(it); } }} #endif distance.hpp000444000765000024 501712161110657 23731 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DISTANCE_09172005_0721) #define FUSION_DISTANCE_09172005_0721 #include #include #include #include #include #include namespace boost { namespace fusion { struct random_access_traversal_tag; // Special tags: struct iterator_facade_tag; // iterator facade tag struct boost_array_iterator_tag; // boost::array iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { template struct distance_impl { // default implementation template struct apply : distance_detail::linear_distance {}; }; template <> struct distance_impl { template struct apply : First::template distance {}; }; template <> struct distance_impl; template <> struct distance_impl; template <> struct distance_impl; } namespace result_of { template struct distance : extension::distance_impl::type>:: template apply { typedef typename extension::distance_impl::type>:: template apply::type distance_application; BOOST_STATIC_CONSTANT(int, value = distance_application::value); }; } template inline typename result_of::distance::type distance(First const& a, Last const& b) { return result_of::distance::call(a,b); } }} #endif equal_to.hpp000444000765000024 633412161110653 23747 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_EQUAL_TO_05052005_1208) #define FUSION_EQUAL_TO_05052005_1208 #include #include #include #include #include #include namespace boost { namespace fusion { // Special tags: struct iterator_facade_tag; // iterator facade tag struct boost_array_iterator_tag; // boost::array iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { template struct equal_to_impl { // default implementation template struct apply : is_same::type, typename add_const::type> {}; }; template <> struct equal_to_impl { template struct dispatch : mpl::false_ {}; template struct dispatch // same tag : It1::template equal_to {}; template struct apply : dispatch {}; }; template <> struct equal_to_impl; template <> struct equal_to_impl; template <> struct equal_to_impl; } namespace result_of { template struct equal_to : extension::equal_to_impl::type>:: template apply {}; } namespace iterator_operators { template inline typename boost::enable_if< mpl::and_, is_fusion_iterator > , bool >::type operator==(Iter1 const&, Iter2 const&) { return result_of::equal_to::value; } template inline typename boost::enable_if< mpl::and_, is_fusion_iterator > , bool >::type operator!=(Iter1 const&, Iter2 const&) { return !result_of::equal_to::value; } } using iterator_operators::operator==; using iterator_operators::operator!=; }} #endif iterator_adapter.hpp000444000765000024 736112161110651 25466 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ITERATOR_ADAPTER_08112011_0942) #define FUSION_ITERATOR_ADAPTER_08112011_0942 #include #include #include namespace boost { namespace fusion { template struct iterator_adapter : iterator_facade { typedef typename remove_const::type iterator_base_type; iterator_base_type iterator_base; iterator_adapter(iterator_base_type const& iterator_base_) : iterator_base(iterator_base_) {} // default implementation template struct equal_to : result_of::equal_to< typename I1::iterator_base_type , typename I2::iterator_base_type > {}; // default implementation template struct advance { typedef typename Derived_::template make< typename result_of::advance< typename Iterator::iterator_base_type, N >::type>::type type; static type call(Iterator const& it) { return type(fusion::advance(it.iterator_base)); } }; // default implementation template struct distance : result_of::distance< typename First::iterator_base_type , typename Last::iterator_base_type > {}; // default implementation template struct value_of : result_of::value_of< typename Iterator::iterator_base_type > {}; // default implementation template struct deref { typedef typename result_of::deref< typename Iterator::iterator_base_type >::type type; static type call(Iterator const& it) { return fusion::deref(it.iterator_base); } }; // default implementation template struct next { typedef typename Derived_::template make< typename result_of::next< typename Iterator::iterator_base_type >::type>::type type; static type call(Iterator const& i) { return type(fusion::next(i.iterator_base)); } }; // default implementation template struct prior { typedef typename Derived_::template make< typename result_of::prior< typename Iterator::iterator_base_type >::type>::type type; static type call(Iterator const& i) { return type(fusion::prior(i.iterator_base)); } }; }; }} #endif iterator_facade.hpp000444000765000024 363412161110676 25257 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ITERATOR_FACADE_09252006_1011) #define FUSION_ITERATOR_FACADE_09252006_1011 #include #include #include #include #include #include namespace boost { namespace fusion { struct iterator_facade_tag; template struct iterator_facade : iterator_base { typedef iterator_facade_tag fusion_tag; typedef Derived derived_type; typedef Category category; // default implementation template struct equal_to // default implementation : is_same< typename I1::derived_type , typename I2::derived_type > {}; // default implementation template struct advance : mpl::if_c< (N::value > 0) , advance_detail::forward , advance_detail::backward >::type { BOOST_MPL_ASSERT_NOT((traits::is_random_access)); }; // default implementation template struct distance : distance_detail::linear_distance {}; }; }} #endif key_of.hpp000444000765000024 213612161110661 23405 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ITERATOR_KEY_OF_HPP #define BOOST_FUSION_ITERATOR_KEY_OF_HPP #include namespace boost { namespace fusion { struct iterator_facade_tag; namespace extension { template struct key_of_impl; template <> struct key_of_impl { template struct apply : It::template key_of {}; }; } namespace result_of { template struct key_of : extension::key_of_impl::type>:: template apply {}; } }} #endif mpl.hpp000444000765000024 111412161110644 22715 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ITERATOR_MPL_10022005_0557) #define FUSION_ITERATOR_MPL_10022005_0557 #include #include #endif next.hpp000444000765000024 345712161110665 23122 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_NEXT_05042005_1101) #define FUSION_NEXT_05042005_1101 #include namespace boost { namespace fusion { // Special tags: struct iterator_facade_tag; // iterator facade tag struct boost_array_iterator_tag; // boost::array iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { template struct next_impl { template struct apply {}; }; template <> struct next_impl { template struct apply : Iterator::template next {}; }; template <> struct next_impl; template <> struct next_impl; template <> struct next_impl; } namespace result_of { template struct next : extension::next_impl::type>:: template apply {}; } template typename result_of::next::type const next(Iterator const& i) { return result_of::next::call(i); } }} #endif prior.hpp000444000765000024 347412161110654 23274 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_PRIOR_05042005_1144) #define FUSION_PRIOR_05042005_1144 #include namespace boost { namespace fusion { // Special tags: struct iterator_facade_tag; // iterator facade tag struct boost_array_iterator_tag; // boost::array iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { template struct prior_impl { template struct apply {}; }; template <> struct prior_impl { template struct apply : Iterator::template prior {}; }; template <> struct prior_impl; template <> struct prior_impl; template <> struct prior_impl; } namespace result_of { template struct prior : extension::prior_impl::type>:: template apply {}; } template typename result_of::prior::type const prior(Iterator const& i) { return result_of::prior::call(i); } }} #endif segmented_iterator.hpp000444000765000024 131512161110647 26017 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_ITERATOR_HPP_INCLUDED #include #include #include #include #endif value_of.hpp000444000765000024 332312161110657 23735 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VALUE_OF_05052005_1126) #define FUSION_VALUE_OF_05052005_1126 #include #include namespace boost { namespace fusion { // Special tags: struct iterator_facade_tag; // iterator facade tag struct boost_array_iterator_tag; // boost::array iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { template struct value_of_impl { template struct apply {}; }; template <> struct value_of_impl { template struct apply : Iterator::template value_of {}; }; template <> struct value_of_impl; template <> struct value_of_impl; template <> struct value_of_impl; } namespace result_of { template struct value_of : extension::value_of_impl::type>:: template apply {}; } }} #endif value_of_data.hpp000444000765000024 221712161110642 24721 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/*============================================================================= Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP #define BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP #include namespace boost { namespace fusion { struct iterator_facade_tag; namespace extension { template struct value_of_data_impl; template <> struct value_of_data_impl { template struct apply : It::template value_of_data {}; }; } namespace result_of { template struct value_of_data : extension::value_of_data_impl::type>:: template apply {}; } }} #endif detail000755000765000024 012161110672 22525 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iteratoradapt_deref_traits.hpp000444000765000024 171512161110642 27220 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ADAPT_DEREF_TRAITS_05062005_0900) #define FUSION_ADAPT_DEREF_TRAITS_05062005_0900 #include namespace boost { namespace fusion { namespace detail { struct adapt_deref_traits { template struct apply { typedef typename result_of::deref::type type; static type call(Iterator const& i) { return *i.first; } }; }; }}} #endif adapt_value_traits.hpp000444000765000024 152312161110655 27250 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ADAPT_VALUE_TRAITS_05062005_0859) #define FUSION_ADAPT_VALUE_TRAITS_05062005_0859 #include namespace boost { namespace fusion { namespace detail { struct adapt_value_traits { template struct apply { typedef typename result_of::value_of::type type; }; }; }}} #endif advance.hpp000444000765000024 472712161110612 25000 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ADVANCE_09172005_1149) #define FUSION_ADVANCE_09172005_1149 #include #include #include #include #include #include namespace boost { namespace fusion { namespace advance_detail { // Default advance implementation, perform next(i) // or prior(i) N times. template struct forward; template struct next_forward { typedef typename forward< typename result_of::next::type , N-1 >::type type; }; template struct forward { typedef typename mpl::eval_if_c< (N == 0) , mpl::identity , next_forward >::type type; static type const& call(type const& i) { return i; } template static type call(I const& i) { return call(fusion::next(i)); } }; template struct backward; template struct next_backward { typedef typename backward< typename result_of::prior::type , N+1 >::type type; }; template struct backward { typedef typename mpl::eval_if_c< (N == 0) , mpl::identity , next_backward >::type type; static type const& call(type const& i) { return i; } template static type call(I const& i) { return call(fusion::prior(i)); } }; }}} #endif distance.hpp000444000765000024 353512161110643 25171 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DISTANCE_09172005_0730) #define FUSION_DISTANCE_09172005_0730 #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace distance_detail { // Default distance implementation, linear // search for the Last iterator. template struct linear_distance; template struct next_distance { typedef typename mpl::next< typename linear_distance< typename result_of::next::type , Last >::type >::type type; }; template struct linear_distance : mpl::eval_if< result_of::equal_to , mpl::identity > , next_distance >::type { typedef typename mpl::eval_if< result_of::equal_to , mpl::identity > , next_distance >::type type; static type call(First const&, Last const&) { return type(); } }; }}} #endif segment_sequence.hpp000444000765000024 377712161110672 26743 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_SEQUENCE_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_SEQUENCE_HPP_INCLUDED #include #include #include #include namespace boost { namespace fusion { namespace detail { struct segment_sequence_tag {}; // Here, Sequence is a sequence of ranges (which may or may not be // segmented). template struct segment_sequence : sequence_base > { typedef fusion_sequence_tag tag; typedef segment_sequence_tag fusion_tag; typedef typename Sequence::is_view is_view; typedef typename Sequence::category category; typedef Sequence sequence_type; sequence_type sequence; explicit segment_sequence(Sequence const & seq) : sequence(seq) {} }; } namespace extension { template struct is_segmented_impl; template<> struct is_segmented_impl { template struct apply : mpl::true_ {}; }; template struct segments_impl; template<> struct segments_impl { template struct apply { typedef typename Sequence::sequence_type type; static type call(Sequence & seq) { return seq.sequence; } }; }; }}} #endif segmented_equal_to.hpp000444000765000024 242312161110645 27240 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_EQUAL_TO_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_ITERATOR_EQUAL_TO_HPP_INCLUDED #include #include #include namespace boost { namespace fusion { struct nil; namespace detail { template struct segmented_equal_to : mpl::and_< segmented_equal_to< typename Stack1::cdr_type, typename Stack2::cdr_type > , result_of::equal_to< typename Stack1::car_type::begin_type, typename Stack2::car_type::begin_type > > {}; template <> struct segmented_equal_to : mpl::true_ {}; } }} #endif segmented_iterator.hpp000444000765000024 1051012161110662 27273 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_SEGMENTED_ITERATOR_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_ITERATOR_SEGMENTED_ITERATOR_HPP_INCLUDED #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { struct nil; namespace detail { template struct segmented_next_impl; } // A segmented iterator wraps a "context", which is a cons list // of ranges, the frontmost is range over values and the rest // are ranges over internal segments. template struct segmented_iterator : iterator_facade, forward_traversal_tag> { explicit segmented_iterator(Context const& ctx) : context(ctx) {} //auto deref(it) //{ // return deref(begin(car(it.context))) //} template struct deref { typedef typename result_of::deref< typename It::context_type::car_type::begin_type >::type type; static type call(It const& it) { return *it.context.car.first; } }; //auto deref_data(it) //{ // return deref_data(begin(car(it.context))) //} template struct deref_data { typedef typename result_of::deref_data< typename It::context_type::car_type::begin_type >::type type; static type call(It const& it) { return fusion::deref_data(it.context.car.first); } }; //auto key_of(it) //{ // return key_of(begin(car(it.context))) //} template struct key_of : result_of::key_of {}; //auto value_of(it) //{ // return value_of(begin(car(it.context))) //} template struct value_of : result_of::value_of {}; //auto value_of_data(it) //{ // return value_of_data(begin(car(it.context))) //} template struct value_of_data : result_of::value_of_data {}; // Compare all the segment iterators in each stack, starting with // the bottom-most. template < typename It1 , typename It2 , int Size1 = It1::context_type::size::value , int Size2 = It2::context_type::size::value > struct equal_to : mpl::false_ {}; template struct equal_to : detail::segmented_equal_to< typename It1::context_type , typename It2::context_type > {}; template struct next { typedef detail::segmented_next_impl impl; typedef segmented_iterator type; static type call(It const& it) { return type(impl::call(it.context)); } }; typedef Context context_type; context_type context; }; }} #endif segmented_next_impl.hpp000444000765000024 2021612161110622 27441 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_NEXT_IMPL_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_ITERATOR_NEXT_IMPL_HPP_INCLUDED #include #include #include #include #include #include namespace boost { namespace fusion { template struct iterator_range; template struct segmented_iterator; namespace detail { template struct segmented_begin_impl; //bool is_invalid(stack) //{ // return empty(car(stack)); //} template struct is_invalid : result_of::equal_to< typename Stack::car_type::begin_type, typename Stack::car_type::end_type > {}; ////Advance the first iterator in the seq at the ////top of a stack of iterator ranges. Return the ////new stack. //auto pop_front_car(stack) //{ // return cons(iterator_range(next(begin(car(stack))), end(car(stack))), cdr(stack)); //} template struct pop_front_car { typedef iterator_range< typename result_of::next< typename Stack::car_type::begin_type >::type , typename Stack::car_type::end_type > car_type; typedef cons type; static type call(Stack const & stack) { return type( car_type(fusion::next(stack.car.first), stack.car.last), stack.cdr); } }; template < typename Stack, typename Next = typename pop_front_car::type, bool IsInvalid = is_invalid::value, int StackSize = Stack::size::value> struct segmented_next_impl_recurse; // Handle the case where the top of the stack has no usable //auto segmented_next_impl_recurse3(stack) //{ // if (size(stack) == 1) // return cons(iterator_range(end(car(stack)), end(car(stack))), nil); // else // return segmented_next_impl_recurse(stack.cdr); //} template < typename Stack, int StackSize = Stack::size::value> struct segmented_next_impl_recurse3 { typedef segmented_next_impl_recurse impl; typedef typename impl::type type; static type call(Stack const & stack) { return impl::call(stack.cdr); } }; template struct segmented_next_impl_recurse3 { typedef typename Stack::car_type::end_type end_type; typedef iterator_range range_type; typedef cons type; static type call(Stack const & stack) { return type(range_type(stack.car.last, stack.car.last)); } }; //auto segmented_next_impl_recurse2(stack) //{ // auto res = segmented_begin_impl(front(car(stack)), stack); // if (is_invalid(res)) // return segmented_next_impl_recurse3(stack); // else // return res; //} template < typename Stack, typename Sequence = typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type, typename Result = typename segmented_begin_impl::type, bool IsInvalid = is_invalid::value> struct segmented_next_impl_recurse2 { typedef segmented_next_impl_recurse3 impl; typedef typename impl::type type; static type call(Stack const & stack) { return impl::call(stack); } }; template struct segmented_next_impl_recurse2 { typedef Result type; static type call(Stack const & stack) { return segmented_begin_impl::call(*stack.car.first, stack); } }; //auto segmented_next_impl_recurse(stack) //{ // auto next = pop_front_car(stack); // if (is_invalid(next)) // if (1 == size(stack)) // return next; // else // return segmented_next_impl_recurse(cdr(stack)); // else // return segmented_next_impl_recurse2(next) //} template struct segmented_next_impl_recurse { typedef typename segmented_next_impl_recurse::type type; static type call(Stack const& stack) { return segmented_next_impl_recurse::call(stack.cdr); } }; template struct segmented_next_impl_recurse { typedef Next type; static type call(Stack const & stack) { return pop_front_car::call(stack); } }; template struct segmented_next_impl_recurse { typedef segmented_next_impl_recurse2 impl; typedef typename impl::type type; static type call(Stack const & stack) { return impl::call(pop_front_car::call(stack)); } }; //auto segmented_next_impl(stack) //{ // // car(stack) is a seq of values, not a seq of segments // auto next = pop_front_car(stack); // if (is_invalid(next)) // return segmented_next_impl_recurse(cdr(next)); // else // return next; //} template < typename Stack, typename Next = typename pop_front_car::type, bool IsInvalid = is_invalid::value> struct segmented_next_impl_aux { typedef segmented_next_impl_recurse impl; typedef typename impl::type type; static type call(Stack const & stack) { return impl::call(stack.cdr); } }; template struct segmented_next_impl_aux { typedef Next type; static type call(Stack const & stack) { return pop_front_car::call(stack); } }; template struct segmented_next_impl : segmented_next_impl_aux {}; } }} #endif mpl000755000765000024 012161110670 22051 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iteratorconvert_iterator.hpp000444000765000024 310112161110647 26307 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_CONVERT_ITERATOR_05062005_1218) #define FUSION_CONVERT_ITERATOR_05062005_1218 #include #include #include namespace boost { namespace fusion { template struct mpl_iterator; // forward declaration // Test T. If it is a fusion iterator, return a reference to it. // else, assume it is an mpl iterator. template struct convert_iterator { typedef typename mpl::if_< is_fusion_iterator , T , mpl_iterator >::type type; static T const& call(T const& x, mpl::true_) { return x; } static mpl_iterator call(T const& /*x*/, mpl::false_) { return mpl_iterator(); } static typename mpl::if_< is_fusion_iterator , T const& , mpl_iterator >::type call(T const& x) { return call(x, is_fusion_iterator()); } }; }} #endif fusion_iterator.hpp000444000765000024 510012161110670 26127 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/iterator/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_FUSION_ITERATOR_10012005_1551) #define FUSION_FUSION_ITERATOR_10012005_1551 #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct to_mpl_category { typedef typename mpl::eval_if< is_base_of, mpl::random_access_iterator_tag, mpl::eval_if< is_base_of, mpl::bidirectional_iterator_tag, mpl::forward_iterator_tag > >::type type; }; }}} namespace boost { namespace mpl { template struct fusion_iterator { typedef typename fusion::result_of::value_of::type type; typedef typename fusion::traits::category_of::type fusion_category; typedef typename fusion::detail::to_mpl_category::type category; typedef Iterator iterator; }; template struct next > { typedef fusion_iterator::type> type; }; template struct prior > { typedef fusion_iterator::type> type; }; template struct advance, N> { typedef fusion_iterator::type> type; }; template struct distance, fusion_iterator > : fusion::result_of::distance {}; }} #endif mpl000755000765000024 012161110677 20227 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusionat.hpp000444000765000024 157612161110654 21505 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_AT_10022005_1616) #define FUSION_AT_10022005_1616 #include #include namespace boost { namespace fusion { struct fusion_sequence_tag; } namespace mpl { template struct at_impl; template <> struct at_impl { template struct apply : fusion::result_of::value_at {}; }; }} #endif back.hpp000444000765000024 205012161110645 21765 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_BACK_10022005_1620) #define FUSION_BACK_10022005_1620 #include #include #include #include namespace boost { namespace mpl { template struct back_impl; template <> struct back_impl { template struct apply : fusion::result_of::value_of< typename fusion::result_of::prior< typename fusion::result_of::end::type >::type> {}; }; }} #endif begin.hpp000444000765000024 177612161110600 22156 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_BEGIN_10022005_1620) #define FUSION_BEGIN_10022005_1620 #include #include #include #include namespace boost { namespace mpl { template struct begin_impl; template <> struct begin_impl { template struct apply { typedef fusion_iterator::type> type; }; }; }} #endif clear.hpp000444000765000024 175212161110663 22163 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_CLEAR_10022005_1817) #define FUSION_CLEAR_10022005_1817 #include #include #include namespace boost { namespace mpl { template struct clear_impl; template <> struct clear_impl { template struct apply { typedef typename fusion::detail::clear::type>::type type; }; }; }} #endif empty.hpp000444000765000024 147112161110613 22224 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_EMPTY_10022005_1619) #define FUSION_EMPTY_10022005_1619 #include #include namespace boost { namespace mpl { template struct empty_impl; template <> struct empty_impl { template struct apply : fusion::result_of::empty {}; }; }} #endif end.hpp000444000765000024 176012161110615 21637 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_END_10022005_1619) #define FUSION_END_10022005_1619 #include #include #include #include namespace boost { namespace mpl { template struct end_impl; template <> struct end_impl { template struct apply { typedef fusion_iterator::type> type; }; }; }} #endif erase.hpp000444000765000024 232512161110602 22162 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ERASE_10022005_1835) #define FUSION_ERASE_10022005_1835 #include #include #include #include namespace boost { namespace mpl { template struct erase_impl; template <> struct erase_impl { template struct apply { typedef typename fusion::result_of::erase::type result; typedef typename fusion::result_of::convert< typename fusion::detail::tag_of::type, result>::type type; }; }; }} #endif erase_key.hpp000444000765000024 233012161110602 23026 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ERASE_KEY_10022005_1907) #define FUSION_ERASE_KEY_10022005_1907 #include #include #include #include namespace boost { namespace mpl { template struct erase_key_impl; template <> struct erase_key_impl { template struct apply { typedef typename fusion::result_of::erase_key::type result; typedef typename fusion::result_of::convert< typename fusion::detail::tag_of::type, result>::type type; }; }; }} #endif front.hpp000444000765000024 164212161110611 22214 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_FRONT_10022005_1618) #define FUSION_FRONT_10022005_1618 #include #include #include namespace boost { namespace mpl { template struct front_impl; template <> struct front_impl { template struct apply : fusion::result_of::value_of::type> {}; }; }} #endif has_key.hpp000444000765000024 153412161110646 22517 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_HAS_KEY_10022005_1617) #define FUSION_HAS_KEY_10022005_1617 #include #include namespace boost { namespace mpl { template struct has_key_impl; template <> struct has_key_impl { template struct apply : fusion::result_of::has_key {}; }; }} #endif insert.hpp000444000765000024 232212161110607 22371 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INSERT_10022005_1837) #define FUSION_INSERT_10022005_1837 #include #include #include #include namespace boost { namespace mpl { template struct insert_impl; template <> struct insert_impl { template struct apply { typedef typename fusion::result_of::insert::type result; typedef typename fusion::result_of::convert< typename fusion::detail::tag_of::type, result>::type type; }; }; }} #endif insert_range.hpp000444000765000024 240412161110656 23552 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_INSERT_RANGE_10022005_1838) #define FUSION_INSERT_RANGE_10022005_1838 #include #include #include #include namespace boost { namespace mpl { template struct insert_range_impl; template <> struct insert_range_impl { template struct apply { typedef typename fusion::result_of::insert_range::type result; typedef typename fusion::result_of::convert< typename fusion::detail::tag_of::type, result>::type type; }; }; }} #endif pop_back.hpp000444000765000024 227612161110643 22653 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_POP_BACK_10022005_1801) #define FUSION_POP_BACK_10022005_1801 #include #include #include #include namespace boost { namespace mpl { template struct pop_back_impl; template <> struct pop_back_impl { template struct apply { typedef typename fusion::result_of::pop_back::type result; typedef typename fusion::result_of::convert< typename fusion::detail::tag_of::type, result>::type type; }; }; }} #endif pop_front.hpp000444000765000024 230512161110652 23074 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_POP_FRONT_10022005_1800) #define FUSION_POP_FRONT_10022005_1800 #include #include #include #include namespace boost { namespace mpl { template struct pop_front_impl; template <> struct pop_front_impl { template struct apply { typedef typename fusion::result_of::pop_front::type result; typedef typename fusion::result_of::convert< typename fusion::detail::tag_of::type, result>::type type; }; }; }} #endif push_back.hpp000444000765000024 232412161110614 23024 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_PUSH_BACK_10022005_1647) #define FUSION_PUSH_BACK_10022005_1647 #include #include #include #include namespace boost { namespace mpl { template struct push_back_impl; template <> struct push_back_impl { template struct apply { typedef typename fusion::result_of::push_back::type result; typedef typename fusion::result_of::convert< typename fusion::detail::tag_of::type, result>::type type; }; }; }} #endif push_front.hpp000444000765000024 233312161110677 23265 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_PUSH_FRONT_10022005_1720) #define FUSION_PUSH_FRONT_10022005_1720 #include #include #include #include namespace boost { namespace mpl { template struct push_front_impl; template <> struct push_front_impl { template struct apply { typedef typename fusion::result_of::push_front::type result; typedef typename fusion::result_of::convert< typename fusion::detail::tag_of::type, result>::type type; }; }; }} #endif size.hpp000444000765000024 146212161110616 22043 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SIZE_10022005_1617) #define FUSION_SIZE_10022005_1617 #include #include namespace boost { namespace mpl { template struct size_impl; template <> struct size_impl { template struct apply : fusion::result_of::size {}; }; }} #endif detail000755000765000024 012161110654 21464 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mplclear.hpp000444000765000024 256412161110654 23427 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/mpl/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_CLEAR_10022005_1442) #define FUSION_CLEAR_10022005_1442 #include #include #include #include #include namespace boost { namespace fusion { struct cons_tag; struct map_tag; struct set_tag; struct vector_tag; struct deque_tag; namespace detail { template struct clear; template <> struct clear : mpl::identity > {}; template <> struct clear : mpl::identity > {}; template <> struct clear : mpl::identity > {}; template <> struct clear : mpl::identity > {}; template <> struct clear : mpl::identity > {}; } }} #endif sequence000755000765000024 012161110642 21237 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusioncomparison.hpp000444000765000024 150712161110604 24260 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SEQUENCE_COMPARISON_10022005_0615) #define FUSION_SEQUENCE_COMPARISON_10022005_0615 #include #include #include #include #include #include #endif convert.hpp000444000765000024 264112161110611 23564 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_CONVERT_10022005_1442) #define FUSION_CONVERT_10022005_1442 namespace boost { namespace fusion { namespace extension { template struct convert_impl; } namespace result_of { template struct convert { typedef typename extension::convert_impl gen; typedef typename gen::template apply::type type; }; } template inline typename result_of::convert::type convert(Sequence& seq) { typedef typename result_of::convert::gen gen; return gen::call(seq); } template inline typename result_of::convert::type convert(Sequence const& seq) { typedef typename result_of::convert::gen gen; return gen::call(seq); } }} #endif intrinsic_fwd.hpp000444000765000024 1240612161110642 24772 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED) #define BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED #include #include #include namespace boost { namespace fusion { namespace extension { template struct at_impl; template struct begin_impl; template struct empty_impl; template struct end_impl; template struct has_key_impl; template struct segments_impl; template struct size_impl; template struct value_at_impl; template struct at_key_impl; template struct value_at_key_impl; } namespace result_of { template struct at; template struct at_c; template struct back; template struct begin; template struct empty; template struct end; template struct front; template struct has_key; template struct segments; template struct size; template struct value_at; template struct value_at_c; template struct at_key; template struct value_at_key; } template typename lazy_disable_if< is_const , result_of::at >::type at(Sequence& seq); template typename result_of::at::type at(Sequence const& seq); template typename lazy_disable_if< is_const , result_of::at_c >::type at_c(Sequence& seq); template typename result_of::at_c::type at_c(Sequence const& seq); template typename result_of::back::type back(Sequence& seq); template typename result_of::back::type back(Sequence const& seq); template typename lazy_enable_if< traits::is_sequence , result_of::begin >::type const begin(Sequence& seq); template typename lazy_enable_if< traits::is_sequence , result_of::begin >::type const begin(Sequence const& seq); template typename result_of::empty::type empty(Sequence const&); template typename lazy_enable_if< traits::is_sequence , result_of::end >::type const end(Sequence& seq); template typename lazy_enable_if< traits::is_sequence , result_of::end >::type const end(Sequence const& seq); template typename result_of::front::type front(Sequence& seq); template typename result_of::front::type front(Sequence const& seq); template typename result_of::has_key::type has_key(Sequence const& seq); template typename lazy_disable_if< is_const , result_of::segments >::type segments(Sequence& seq); template typename result_of::segments::type segments(Sequence const& seq); template typename result_of::size::type size(Sequence const&); template typename lazy_disable_if< is_const , result_of::at_key >::type at_key(Sequence& seq); template typename result_of::at_key::type at_key(Sequence const& seq); }} #endif io.hpp000444000765000024 105612161110642 22516 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SEQUENCE_IO_10032005_0836) #define FUSION_SEQUENCE_IO_10032005_0836 #include #include #endif comparison000755000765000024 012161110650 23410 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequenceenable_comparison.hpp000444000765000024 242112161110636 27741 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ENABLE_COMPARISON_09232005_1958) #define FUSION_ENABLE_COMPARISON_09232005_1958 #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace traits { template struct enable_equality : mpl::or_, traits::is_sequence > {}; template struct enable_comparison : mpl::and_< mpl::or_, traits::is_sequence > , mpl::equal_to, result_of::size > > {}; }}} #endif equal_to.hpp000444000765000024 350412161110650 26071 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_EQUAL_TO_05052005_0431) #define FUSION_EQUAL_TO_05052005_0431 #include #include #include #include #include #include #if defined (BOOST_MSVC) # pragma warning(push) # pragma warning (disable: 4100) // unreferenced formal parameter #endif namespace boost { namespace fusion { template inline bool equal_to(Seq1 const& a, Seq2 const& b) { return result_of::size::value == result_of::size::value && detail::sequence_equal_to< Seq1 const, Seq2 const , result_of::size::value == result_of::size::value>:: call(fusion::begin(a), fusion::begin(b)); } namespace operators { template inline typename boost::enable_if< traits::enable_equality , bool >::type operator==(Seq1 const& a, Seq2 const& b) { return fusion::equal_to(a, b); } } using operators::operator==; }} #if defined (BOOST_MSVC) # pragma warning(pop) #endif #endif greater.hpp000444000765000024 320212161110645 25710 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_GREATER_05052005_0432) #define FUSION_GREATER_05052005_0432 #include #include #include #include #if defined(FUSION_DIRECT_OPERATOR_USAGE) #include #else #include #endif namespace boost { namespace fusion { template inline bool greater(Seq1 const& a, Seq2 const& b) { #if defined(FUSION_DIRECT_OPERATOR_USAGE) return detail::sequence_greater:: call(fusion::begin(a), fusion::begin(b)); #else return (b < a); #endif } namespace operators { template inline typename boost::enable_if< traits::enable_comparison , bool >::type operator>(Seq1 const& a, Seq2 const& b) { return fusion::greater(a, b); } } using operators::operator>; }} #endif greater_equal.hpp000444000765000024 325112161110643 27101 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_GREATER_EQUAL_05052005_0432) #define FUSION_GREATER_EQUAL_05052005_0432 #include #include #include #include #if defined(FUSION_DIRECT_OPERATOR_USAGE) #include #else #include #endif namespace boost { namespace fusion { template inline bool greater_equal(Seq1 const& a, Seq2 const& b) { #if defined(FUSION_DIRECT_OPERATOR_USAGE) return detail::sequence_greater_equal:: call(fusion::begin(a), fusion::begin(b)); #else return !(a < b); #endif } namespace operators { template inline typename boost::enable_if< traits::enable_comparison , bool >::type operator>=(Seq1 const& a, Seq2 const& b) { return fusion::greater_equal(a, b); } } using operators::operator>=; }} #endif less.hpp000444000765000024 265312161110627 25236 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_LESS_05052005_0432) #define FUSION_LESS_05052005_0432 #include #include #include #include #include namespace boost { namespace fusion { template inline bool less(Seq1 const& a, Seq2 const& b) { return detail::sequence_less:: call(fusion::begin(a), fusion::begin(b)); } namespace operators { template inline typename boost::enable_if< traits::enable_comparison , bool >::type operator<(Seq1 const& a, Seq2 const& b) { return fusion::less(a, b); } } using operators::operator<; }} #endif less_equal.hpp000444000765000024 521612161110620 26414 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_LESS_EQUAL_05052005_0432) #define FUSION_LESS_EQUAL_05052005_0432 #include #include #include #include #include #if defined(FUSION_DIRECT_OPERATOR_USAGE) #include #else #include #endif namespace boost { namespace fusion { template inline bool less_equal(Seq1 const& a, Seq2 const& b) { #if defined(FUSION_DIRECT_OPERATOR_USAGE) return detail::sequence_less_equal:: call(fusion::begin(a), fusion::begin(b)); #else return !(b < a); #endif } namespace operators { #if defined(BOOST_MSVC) && (BOOST_MSVC <= 1400) // Workaround for VC8.0 and VC7.1 template inline bool operator<=(sequence_base const& a, sequence_base const& b) { return less_equal(a.derived(), b.derived()); } template inline typename disable_if, bool>::type operator<=(sequence_base const& a, Seq2 const& b) { return less_equal(a.derived(), b); } template inline typename disable_if, bool>::type operator<=(Seq1 const& a, sequence_base const& b) { return less_equal(a, b.derived()); } #else // Somehow VC8.0 and VC7.1 does not like this code // but barfs somewhere else. template inline typename boost::enable_if< traits::enable_comparison , bool >::type operator<=(Seq1 const& a, Seq2 const& b) { return fusion::less_equal(a, b); } #endif } using operators::operator<=; }} #endif not_equal_to.hpp000444000765000024 351512161110633 26754 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_NOT_EQUAL_TO_05052005_0431) #define FUSION_NOT_EQUAL_TO_05052005_0431 #include #include #include #include #if defined(FUSION_DIRECT_OPERATOR_USAGE) #include #else #include #endif namespace boost { namespace fusion { template inline bool not_equal_to(Seq1 const& a, Seq2 const& b) { #if defined(FUSION_DIRECT_OPERATOR_USAGE) return result_of::size::value != result_of::size::value || detail::sequence_not_equal_to< Seq1 const, Seq2 const , result_of::size::value == result_of::size::value>:: call(fusion::begin(a), fusion::begin(b)); #else return !(a == b); #endif } namespace operators { template inline typename boost::enable_if< traits::enable_equality , bool >::type operator!=(Seq1 const& a, Seq2 const& b) { return fusion::not_equal_to(a, b); } } using operators::operator!=; }} #endif detail000755000765000024 012161110675 24661 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparisonequal_to.hpp000444000765000024 365012161110625 27337 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_EQUAL_TO_05052005_1142) #define FUSION_EQUAL_TO_05052005_1142 #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct sequence_equal_to { typedef typename result_of::end::type end1_type; typedef typename result_of::end::type end2_type; template static bool call(I1 const&, I2 const&, mpl::true_) { return true; } template static bool call(I1 const& a, I2 const& b, mpl::false_) { return extension::as_const(*a) == extension::as_const(*b) && call(fusion::next(a), fusion::next(b)); } template static bool call(I1 const& a, I2 const& b) { typename result_of::equal_to::type eq; return call(a, b, eq); } }; template struct sequence_equal_to { template static bool call(I1 const& /*a*/, I2 const& /*b*/) { return false; } }; }}} #endif greater.hpp000444000765000024 332012161110600 27142 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_GREATER_05052005_1142) #define FUSION_GREATER_05052005_1142 #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct sequence_greater { typedef typename result_of::end::type end1_type; typedef typename result_of::end::type end2_type; template static bool call(I1 const&, I2 const&, mpl::true_) { return false; } template static bool call(I1 const& a, I2 const& b, mpl::false_) { return extension::as_const(*a) > extension::as_const(*b) || (!(extension::as_const(*b) > extension::as_const(*a)) && call(fusion::next(a), fusion::next(b))); } template static bool call(I1 const& a, I2 const& b) { typename result_of::equal_to::type eq; return call(a, b, eq); } }; }}} #endif greater_equal.hpp000444000765000024 334612161110647 30354 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_GREATER_EQUAL_05052005_1142) #define FUSION_GREATER_EQUAL_05052005_1142 #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct sequence_greater_equal { typedef typename result_of::end::type end1_type; typedef typename result_of::end::type end2_type; template static bool call(I1 const&, I2 const&, mpl::true_) { return true; } template static bool call(I1 const& a, I2 const& b, mpl::false_) { return extension::as_const(*a) >= extension::as_const(*b) && (!(extension::as_const(*b) >= extension::as_const(*a)) || call(fusion::next(a), fusion::next(b))); } template static bool call(I1 const& a, I2 const& b) { typename result_of::equal_to::type eq; return call(a, b, eq); } }; }}} #endif less.hpp000444000765000024 330712161110675 26500 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_LESS_05052005_1141) #define FUSION_LESS_05052005_1141 #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct sequence_less { typedef typename result_of::end::type end1_type; typedef typename result_of::end::type end2_type; template static bool call(I1 const&, I2 const&, mpl::true_) { return false; } template static bool call(I1 const& a, I2 const& b, mpl::false_) { return extension::as_const(*a) < extension::as_const(*b) || (!(extension::as_const(*b) < extension::as_const(*a)) && call(fusion::next(a), fusion::next(b))); } template static bool call(I1 const& a, I2 const& b) { typename result_of::equal_to::type eq; return call(a, b, eq); } }; }}} #endif less_equal.hpp000444000765000024 333512161110636 27665 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_LESS_EQUAL_05052005_1141) #define FUSION_LESS_EQUAL_05052005_1141 #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct sequence_less_equal { typedef typename result_of::end::type end1_type; typedef typename result_of::end::type end2_type; template static bool call(I1 const&, I2 const&, mpl::true_) { return true; } template static bool call(I1 const& a, I2 const& b, mpl::false_) { return extension::as_const(*a) <= extension::as_const(*b) && (!(extension::as_const(*b) <= extension::as_const(*a)) || call(fusion::next(a), fusion::next(b))); } template static bool call(I1 const& a, I2 const& b) { typename result_of::equal_to::type eq; return call(a, b, eq); } }; }}} #endif not_equal_to.hpp000444000765000024 366012161110624 30217 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/comparison/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_NOT_EQUAL_TO_05052005_1141) #define FUSION_NOT_EQUAL_TO_05052005_1141 #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct sequence_not_equal_to { typedef typename result_of::end::type end1_type; typedef typename result_of::end::type end2_type; template static bool call(I1 const&, I2 const&, mpl::true_) { return false; } template static bool call(I1 const& a, I2 const& b, mpl::false_) { return extension::as_const(*a) != extension::as_const(*b) || call(fusion::next(a), fusion::next(b)); } template static bool call(I1 const& a, I2 const& b) { typename result_of::equal_to::type eq; return call(a, b, eq); } }; template struct sequence_not_equal_to { template static bool call(I1 const& a, I2 const& b) { return true; } }; }}} #endif intrinsic000755000765000024 012161110702 23236 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequenceat.hpp000444000765000024 600412161110653 24515 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_AT_05042005_0722) #define FUSION_AT_05042005_0722 #include #include #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag struct std_tuple_tag; // std::tuple tag namespace extension { template struct at_impl { template struct apply; }; template <> struct at_impl { template struct apply : Sequence::template at {}; }; template <> struct at_impl; template <> struct at_impl; template <> struct at_impl; template <> struct at_impl; template <> struct at_impl; } namespace result_of { template struct at : extension::at_impl::type>:: template apply {}; template struct at_c : at > {}; } template inline typename lazy_disable_if< is_const , result_of::at >::type at(Sequence& seq) { return result_of::at::call(seq); } template inline typename result_of::at::type at(Sequence const& seq) { return result_of::at::call(seq); } template inline typename lazy_disable_if< is_const , result_of::at_c >::type at_c(Sequence& seq) { return fusion::at >(seq); } template inline typename result_of::at_c::type at_c(Sequence const& seq) { return fusion::at >(seq); } }} #endif begin.hpp000444000765000024 541612161110655 25205 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_BEGIN_04052005_1132) #define FUSION_BEGIN_04052005_1132 #include #include #include #include #include #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; // iterator facade tag struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag namespace extension { template struct begin_impl { template struct apply : mpl::if_< traits::is_segmented , detail::segmented_begin , blank >::type {}; }; template <> struct begin_impl { template struct apply : Sequence::template begin {}; }; template <> struct begin_impl; template <> struct begin_impl; template <> struct begin_impl; template <> struct begin_impl; } namespace result_of { template struct begin : extension::begin_impl::type>:: template apply {}; } template inline typename lazy_enable_if< traits::is_sequence , result_of::begin >::type const begin(Sequence& seq) { return result_of::begin::call(seq); } template inline typename lazy_enable_if< traits::is_sequence , result_of::begin >::type const begin(Sequence const& seq) { return result_of::begin::call(seq); } }} #endif empty.hpp000444000765000024 341212161110647 25252 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_EMPTY_09162005_0335) #define FUSION_EMPTY_09162005_0335 #include #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct mpl_sequence_tag; // mpl sequence tag namespace extension { template struct empty_impl { template struct apply : mpl::bool_<(result_of::size::value == 0)> {}; }; template <> struct empty_impl { template struct apply : Sequence::template empty {}; }; template <> struct empty_impl; } namespace result_of { template struct empty : extension::empty_impl::type>:: template apply {}; } template inline typename result_of::empty::type empty(Sequence const&) { typedef typename result_of::empty::type result; return result(); } }} #endif end.hpp000444000765000024 532112161110613 24654 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_END_04052005_1141) #define FUSION_END_04052005_1141 #include #include #include #include #include #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag namespace extension { template struct end_impl { template struct apply : mpl::if_< traits::is_segmented , detail::segmented_end , blank >::type {}; }; template <> struct end_impl { template struct apply : Sequence::template end {}; }; template <> struct end_impl; template <> struct end_impl; template <> struct end_impl; template <> struct end_impl; } namespace result_of { template struct end : extension::end_impl::type>:: template apply {}; } template inline typename lazy_enable_if< traits::is_sequence , result_of::end >::type const end(Sequence& seq) { return result_of::end::call(seq); } template inline typename lazy_enable_if< traits::is_sequence , result_of::end >::type const end(Sequence const& seq) { return result_of::end::call(seq); } }} #endif front.hpp000444000765000024 234712161110701 25241 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_FRONT_09162005_0343) #define FUSION_FRONT_09162005_0343 #include #include #include #include namespace boost { namespace fusion { struct fusion_sequence_tag; namespace result_of { template struct front : result_of::deref::type> {}; } template inline typename result_of::front::type front(Sequence& seq) { return *fusion::begin(seq); } template inline typename result_of::front::type front(Sequence const& seq) { return *fusion::begin(seq); } }} #endif has_key.hpp000444000765000024 460112161110662 25535 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_HAS_KEY_09232005_1454) #define FUSION_HAS_KEY_09232005_1454 #include #include #include #include #include #include namespace boost { namespace fusion { struct void_; // Special tags: struct sequence_facade_tag; struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag namespace extension { template struct has_key_impl { template struct apply : mpl::not_< typename result_of::equal_to< typename result_of::find::type , typename result_of::end::type >::type >::type {}; }; template <> struct has_key_impl { template struct apply : Sequence::template has_key {}; }; template <> struct has_key_impl; template <> struct has_key_impl; template <> struct has_key_impl; } namespace result_of { template struct has_key : extension::has_key_impl::type>:: template apply {}; } template inline typename result_of::has_key::type has_key(Sequence const&) { typedef typename result_of::has_key::type result; return result(); } }} #endif segments.hpp000444000765000024 443712161110702 25741 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2006 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTS_04052005_1141) #define BOOST_FUSION_SEGMENTS_04052005_1141 #include #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct iterator_range_tag; // segments: returns a sequence of sequences namespace extension { template struct segments_impl { template struct apply {}; }; template <> struct segments_impl { template struct apply : Sequence::template segments {}; }; template <> struct segments_impl; } namespace result_of { template struct segments { typedef typename traits::tag_of::type tag_type; typedef typename extension::segments_impl::template apply::type type; }; } template inline typename lazy_disable_if< is_const , result_of::segments >::type segments(Sequence& seq) { typedef typename traits::tag_of::type tag_type; return extension::segments_impl::template apply::call(seq); } template inline typename result_of::segments::type segments(Sequence const& seq) { typedef typename traits::tag_of::type tag_type; return extension::segments_impl::template apply::call(seq); } }} #endif size.hpp000444000765000024 526712161110640 25071 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SIZE_05052005_0214) #define FUSION_SIZE_05052005_0214 #include #include #include #include #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag namespace extension { template struct size_impl { template struct unsegmented_size : Sequence::size {}; template struct apply : mpl::if_< traits::is_segmented , detail::segmented_size , unsegmented_size >::type {}; }; template <> struct size_impl { template struct apply : Sequence::template size {}; }; template <> struct size_impl; template <> struct size_impl; template <> struct size_impl; template <> struct size_impl; } namespace result_of { template struct size : extension::size_impl::type>:: template apply { typedef typename extension::size_impl::type>:: template apply::type size_application; BOOST_STATIC_CONSTANT(int, value = size_application::value); }; } template inline typename result_of::size::type size(Sequence const&) { typedef typename result_of::size::type result; return result(); } }} #endif value_at.hpp000444000765000024 374012161110616 25714 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VALUE_AT_05052005_0229) #define FUSION_VALUE_AT_05052005_0229 #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag namespace extension { template struct value_at_impl { template struct apply; }; template <> struct value_at_impl { template struct apply : Sequence::template value_at {}; }; template <> struct value_at_impl; template <> struct value_at_impl; template <> struct value_at_impl; template <> struct value_at_impl; } namespace result_of { template struct value_at : extension::value_at_impl::type>:: template apply {}; template struct value_at_c : fusion::result_of::value_at > {}; } }} #endif detail000755000765000024 012161110700 24476 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsicsegmented_begin.hpp000444000765000024 272012161110612 30466 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace detail { //auto segmented_begin( seq ) //{ // return make_segmented_iterator( segmented_begin_impl( seq, nil ) ); //} template struct segmented_begin { typedef segmented_iterator< typename segmented_begin_impl::type > type; static type call(Sequence& seq) { return type( segmented_begin_impl::call(seq, Nil())); } }; }}} #endif segmented_begin_impl.hpp000444000765000024 613612161110700 31512 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED #include #include #include #include #include #include namespace boost { namespace fusion { template struct iterator_range; }} namespace boost { namespace fusion { namespace detail { struct segmented_begin_fun { template struct apply { typedef iterator_range< typename fusion::result_of::begin::type , typename fusion::result_of::end::type > range_type; typedef cons type; typedef mpl::false_ continue_type; static type call(Sequence& seq, State const&, Context const& context, segmented_begin_fun) { return type(range_type(fusion::begin(seq), fusion::end(seq)), context); } }; }; template ::type::value> struct segmented_begin_impl_aux { typedef segmented_end_impl end_impl; typedef segmented_fold_until_impl< Sequence , typename end_impl::type , Stack , segmented_begin_fun > fold_impl; typedef typename fold_impl::type type; static type call(Sequence& seq, Stack const& stack) { return fold_impl::call(seq, end_impl::call(seq, stack), stack, segmented_begin_fun()); } }; template struct segmented_begin_impl_aux { typedef typename result_of::begin::type begin_type; typedef typename result_of::end::type end_type; typedef iterator_range pair_type; typedef cons type; static type call(Sequence& seq, Stack stack) { return type(pair_type(fusion::begin(seq), fusion::end(seq)), stack); } }; template struct segmented_begin_impl : segmented_begin_impl_aux {}; }}} #endif segmented_end.hpp000444000765000024 235312161110644 30157 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED #include #include #include namespace boost { namespace fusion { namespace detail { //auto segmented_end( seq ) //{ // return make_segmented_iterator( segmented_end_impl( seq ) ); //} template struct segmented_end { typedef segmented_iterator< typename segmented_end_impl::type > type; static type call(Sequence & seq) { return type( segmented_end_impl::call(seq, Nil())); } }; }}} #endif segmented_end_impl.hpp000444000765000024 362212161110675 31204 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED #include #include #include #include #include #include namespace boost { namespace fusion { template struct iterator_range; }} namespace boost { namespace fusion { namespace detail { //auto segmented_end_impl( seq, stack ) //{ // assert(is_segmented(seq)); // auto it = end(segments(seq)); // return cons(iterator_range(it, it), stack); //} template struct segmented_end_impl { BOOST_MPL_ASSERT((traits::is_segmented)); typedef typename result_of::end< typename remove_reference< typename add_const< typename result_of::segments::type >::type >::type >::type end_type; typedef iterator_range pair_type; typedef cons type; static type call(Sequence & seq, Stack stack) { end_type end = fusion::end(fusion::segments(seq)); return type(pair_type(end, end), stack); } }; }}} #endif segmented_size.hpp000444000765000024 363312161110642 30363 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/intrinsic/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_SIZE_08112006_1141) #define BOOST_FUSION_SEGMENTED_SIZE_08112006_1141 #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace detail { /////////////////////////////////////////////////////////////////////////// // calculates the size of any segmented data structure. template struct segmented_size; /////////////////////////////////////////////////////////////////////////// template::value> struct segmented_size_impl : mpl::fold< typename remove_reference< typename add_const< typename result_of::segments::type >::type >::type , mpl::size_t<0> , mpl::plus > > >::type {}; template struct segmented_size_impl : result_of::size::type {}; template struct segmented_size : segmented_size_impl {}; }}} #endif io000755000765000024 012161110642 21646 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequencein.hpp000444000765000024 236512161110642 23130 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/io/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jeremiah Willcock Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_IN_05042005_0120) #define BOOST_IN_05042005_0120 #include #include #include namespace boost { namespace fusion { template inline std::istream& in(std::istream& is, Sequence& seq) { detail::read_sequence(is, seq); return is; } namespace operators { template inline typename boost::enable_if< fusion::traits::is_sequence , std::istream& >::type operator>>(std::istream& is, Sequence& seq) { return fusion::in(is, seq); } } using operators::operator>>; }} #endif out.hpp000444000765000024 251312161110603 23321 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/io/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jeremiah Willcock Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_OUT_05042005_0120) #define BOOST_OUT_05042005_0120 #include #include #include #include #include namespace boost { namespace fusion { template inline std::ostream& out(std::ostream& os, Sequence& seq) { detail::print_sequence(os, seq); return os; } namespace operators { template inline typename boost::enable_if< fusion::traits::is_sequence , std::ostream& >::type operator<<(std::ostream& os, Sequence const& seq) { return fusion::out(os, seq); } } using operators::operator<<; }} #endif detail000755000765000024 012161110645 23113 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/ioin.hpp000444000765000024 516112161110645 24372 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/io/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jeremiah Willcock Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_IN_05052005_0121) #define FUSION_IN_05052005_0121 #include #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct delimiter_in { // read a delimiter template static void read(IS& is, char const* delim, mpl::false_ = mpl::false_()) { detail::string_ios_manip manip(is); manip.read(delim); } template static void read(IS&, char const*, mpl::true_) { } }; struct read_sequence_loop { template static void call(IS&, First const&, Last const&, mpl::true_) { } template static void call(IS& is, First const& first, Last const& last, mpl::false_) { result_of::equal_to< typename result_of::next::type , Last > is_last; is >> *first; delimiter_in::read(is, " ", is_last); call(is, fusion::next(first), last, is_last); } template static void call(IS& is, First const& first, Last const& last) { result_of::equal_to eq; call(is, first, last, eq); } }; template inline void read_sequence(IS& is, Sequence& seq) { delimiter_in::read(is, "("); read_sequence_loop::call(is, fusion::begin(seq), fusion::end(seq)); delimiter_in::read(is, ")"); } }}} #endif manip.hpp000444000765000024 3730712161110637 25120 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/io/detail/*============================================================================= Copyright (c) 1999-2003 Jeremiah Willcock Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_MANIP_05052005_1200) #define FUSION_MANIP_05052005_1200 #include #include #include #include // Tuple I/O manipulators #define FUSION_GET_CHAR_TYPE(T) typename T::char_type #define FUSION_GET_TRAITS_TYPE(T) typename T::traits_type #if defined (BOOST_NO_TEMPLATED_STREAMS) #define FUSION_STRING_OF_STREAM(Stream) std::string #else #define FUSION_STRING_OF_STREAM(Stream) \ std::basic_string< \ FUSION_GET_CHAR_TYPE(Stream) \ , FUSION_GET_TRAITS_TYPE(Stream) \ > #endif //$$$ these should be part of the public API$$$ //$$$ rename tuple_open, tuple_close and tuple_delimiter to // open, close and delimeter and add these synonyms to the // TR1 tuple module. namespace boost { namespace fusion { namespace detail { template int get_xalloc_index(Tag* = 0) { // each Tag will have a unique index static int index = std::ios::xalloc(); return index; } template struct stream_data { struct arena { ~arena() { for ( typename std::vector::iterator i = data.begin() ; i != data.end() ; ++i) { delete *i; } } std::vector data; }; static void attach(Stream& stream, T const& data) { static arena ar; // our arena ar.data.push_back(new T(data)); stream.pword(get_xalloc_index()) = ar.data.back(); } static T const* get(Stream& stream) { return (T const*)stream.pword(get_xalloc_index()); } }; template class string_ios_manip { public: typedef FUSION_STRING_OF_STREAM(Stream) string_type; typedef stream_data stream_data_t; string_ios_manip(Stream& str_) : stream(str_) {} void set(string_type const& s) { stream_data_t::attach(stream, s); } void print(char const* default_) const { // print a delimiter string_type const* p = stream_data_t::get(stream); if (p) stream << *p; else stream << default_; } void read(char const* default_) const { // read a delimiter string_type const* p = stream_data_t::get(stream); using namespace std; ws(stream); if (p) { typedef typename string_type::const_iterator iterator; for (iterator i = p->begin(); i != p->end(); ++i) check_delim(*i); } else { while (*default_) check_delim(*default_++); } } private: template void check_delim(Char c) const { if (!isspace(c)) { if (stream.get() != c) { stream.unget(); stream.setstate(std::ios::failbit); } } } Stream& stream; private: // silence MSVC warning C4512: assignment operator could not be generated string_ios_manip& operator= (string_ios_manip const&); }; } // detail #if defined (BOOST_NO_TEMPLATED_STREAMS) #define STD_TUPLE_DEFINE_MANIPULATOR(name) \ namespace detail \ { \ struct name##_tag; \ \ struct name##_type \ { \ typedef std::string string_type; \ string_type data; \ name##_type(const string_type& d): data(d) {} \ }; \ \ template \ Stream& operator>>(Stream& s, const name##_type& m) \ { \ string_ios_manip(s).set(m.data); \ return s; \ } \ \ template \ Stream& operator<<(Stream& s, const name##_type& m) \ { \ string_ios_manip(s).set(m.data); \ return s; \ } \ } #define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \ inline detail::name##_type \ name(const std::string& s) \ { \ return detail::name##_type(s); \ } \ \ inline detail::name##_type \ name(const char* s) \ { \ return detail::name##_type(std::string(s)); \ } \ \ inline detail::name##_type \ name(char c) \ { \ return detail::name##_type(std::string(1, c)); \ } #else // defined(BOOST_NO_TEMPLATED_STREAMS) #if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) #define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \ template \ inline detail::name##_type \ name(const std::basic_string& s) \ { \ return detail::name##_type(s); \ } \ \ inline detail::name##_type \ name(char const* s) \ { \ return detail::name##_type(std::basic_string(s)); \ } \ \ inline detail::name##_type \ name(wchar_t const* s) \ { \ return detail::name##_type(std::basic_string(s)); \ } \ \ inline detail::name##_type \ name(char c) \ { \ return detail::name##_type(std::basic_string(1, c)); \ } \ \ inline detail::name##_type \ name(wchar_t c) \ { \ return detail::name##_type(std::basic_string(1, c)); \ } #else // defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) #define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \ template \ inline detail::name##_type \ name(const std::basic_string& s) \ { \ return detail::name##_type(s); \ } \ \ template \ inline detail::name##_type \ name(Char s[]) \ { \ return detail::name##_type(std::basic_string(s)); \ } \ \ template \ inline detail::name##_type \ name(Char const s[]) \ { \ return detail::name##_type(std::basic_string(s)); \ } \ \ template \ inline detail::name##_type \ name(Char c) \ { \ return detail::name##_type(std::basic_string(1, c)); \ } #endif #define STD_TUPLE_DEFINE_MANIPULATOR(name) \ namespace detail \ { \ struct name##_tag; \ \ template > \ struct name##_type \ { \ typedef std::basic_string string_type; \ string_type data; \ name##_type(const string_type& d): data(d) {} \ }; \ \ template \ Stream& operator>>(Stream& s, const name##_type& m) \ { \ string_ios_manip(s).set(m.data); \ return s; \ } \ \ template \ Stream& operator<<(Stream& s, const name##_type& m) \ { \ string_ios_manip(s).set(m.data); \ return s; \ } \ } \ #endif // defined(BOOST_NO_TEMPLATED_STREAMS) STD_TUPLE_DEFINE_MANIPULATOR(tuple_open) STD_TUPLE_DEFINE_MANIPULATOR(tuple_close) STD_TUPLE_DEFINE_MANIPULATOR(tuple_delimiter) STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_open) STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_close) STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_delimiter) #undef STD_TUPLE_DEFINE_MANIPULATOR #undef STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS #undef FUSION_STRING_OF_STREAM #undef FUSION_GET_CHAR_TYPE #undef FUSION_GET_TRAITS_TYPE }} #endif out.hpp000444000765000024 520712161110637 24575 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/sequence/io/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jeremiah Willcock Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_OUT_05052005_0121) #define FUSION_OUT_05052005_0121 #include #include #include #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct delimiter_out { // print a delimiter template static void print(OS& os, char const* delim, mpl::false_ = mpl::false_()) { detail::string_ios_manip manip(os); manip.print(delim); } template static void print(OS&, char const*, mpl::true_) { } }; struct print_sequence_loop { template static void call(OS&, First const&, Last const&, mpl::true_) { } template static void call(OS& os, First const& first, Last const& last, mpl::false_) { result_of::equal_to< typename result_of::next::type , Last > is_last; os << *first; delimiter_out::print(os, " ", is_last); call(os, fusion::next(first), last, is_last); } template static void call(OS& os, First const& first, Last const& last) { result_of::equal_to eq; call(os, first, last, eq); } }; template inline void print_sequence(OS& os, Sequence const& seq) { delimiter_out::print(os, "("); print_sequence_loop::call(os, fusion::begin(seq), fusion::end(seq)); delimiter_out::print(os, ")"); } }}} #endif support000755000765000024 012161110702 21140 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusionas_const.hpp000444000765000024 175212161110651 23627 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2012 Nathan Ridge Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_SUPPORT_AS_CONST_HPP #define BOOST_FUSION_SUPPORT_AS_CONST_HPP namespace boost { namespace fusion { namespace extension { // A customization point that allows certain wrappers around // Fusion sequence elements (e.g. adt_attribute_proxy) to be // unwrapped in contexts where the element only needs to be // read. The library wraps accesses to Fusion elements in // such contexts with calls to this function. Users can // specialize this function for their own wrappers. template const T& as_const(const T& obj) { return obj; } }}} #endif category_of.hpp000444000765000024 617712161110645 24330 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_CATEGORY_OF_07202005_0308) #define FUSION_CATEGORY_OF_07202005_0308 #include #include #include namespace boost { namespace fusion { // Special tags: struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag struct incrementable_traversal_tag {}; struct single_pass_traversal_tag : incrementable_traversal_tag {}; struct forward_traversal_tag : single_pass_traversal_tag {}; struct bidirectional_traversal_tag : forward_traversal_tag {}; struct random_access_traversal_tag : bidirectional_traversal_tag {}; struct associative_tag {}; namespace extension { template struct category_of_impl { template struct apply : detail::fusion_category_of {}; }; template <> struct category_of_impl; template <> struct category_of_impl; template <> struct category_of_impl; template <> struct category_of_impl; } namespace traits { template struct category_of : extension::category_of_impl::type>:: template apply {}; template struct is_associative : is_base_of< associative_tag , typename category_of::type> {}; template struct is_incrementable : is_base_of< incrementable_traversal_tag , typename category_of::type> {}; template struct is_single_pass : is_base_of< single_pass_traversal_tag , typename category_of::type> {}; template struct is_forward : is_base_of< forward_traversal_tag , typename category_of::type> {}; template struct is_bidirectional : is_base_of< bidirectional_traversal_tag , typename category_of::type> {}; template struct is_random_access : is_base_of< random_access_traversal_tag , typename category_of::type> {}; } }} #endif is_iterator.hpp000444000765000024 125112161110650 24333 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_IS_ITERATOR_05062005_1219) #define FUSION_IS_ITERATOR_05062005_1219 #include namespace boost { namespace fusion { struct iterator_root; template struct is_fusion_iterator : is_base_of {}; }} #endif is_segmented.hpp000444000765000024 275312161110667 24475 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2006 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_IS_SEGMENTED_03202006_0015) #define FUSION_IS_SEGMENTED_03202006_0015 #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct iterator_range_tag; namespace extension { template struct is_segmented_impl { template struct apply : mpl::false_ {}; }; template <> struct is_segmented_impl { template struct apply : Sequence::is_segmented {}; }; template <> struct is_segmented_impl; } namespace traits { template struct is_segmented : mpl::bool_< (bool)extension::is_segmented_impl::type>:: template apply::type::value > { }; } }} #endif is_sequence.hpp000444000765000024 441512161110617 24322 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_IS_SEQUENCE_05052005_1002) #define FUSION_IS_SEQUENCE_05052005_1002 #include #include #include #include #include #include #include namespace boost { namespace fusion { // Special tags: struct non_fusion_tag; struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag namespace extension { template struct is_sequence_impl { template struct apply : is_convertible {}; }; template <> struct is_sequence_impl { template struct apply : mpl::false_ {}; }; template <> struct is_sequence_impl; template <> struct is_sequence_impl; template <> struct is_sequence_impl; template <> struct is_sequence_impl; } namespace traits { template struct is_sequence : mpl::bool_< (bool)extension::is_sequence_impl< typename fusion::detail::tag_of::type >::template apply::type::value > {}; template struct is_native_fusion_sequence : is_convertible {}; } }} #endif is_view.hpp000444000765000024 354412161110616 23465 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_IS_VIEW_03202006_0015) #define FUSION_IS_VIEW_03202006_0015 #include #include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag namespace extension { template struct is_view_impl { template struct apply : detail::fusion_is_view {}; }; template <> struct is_view_impl { template struct apply : Sequence::is_view {}; }; template <> struct is_view_impl; template <> struct is_view_impl; template <> struct is_view_impl; template <> struct is_view_impl; } namespace traits { template struct is_view : mpl::bool_< (bool)extension::is_view_impl::type>:: template apply::type::value > {}; } }} #endif iterator_base.hpp000444000765000024 155212161110635 24641 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ITERATOR_BASE_05042005_1008) #define FUSION_ITERATOR_BASE_05042005_1008 namespace boost { namespace fusion { struct iterator_root {}; template struct iterator_base : iterator_root { Iterator const& cast() const { return static_cast(*this); } Iterator& cast() { return static_cast(*this); } }; }} #endif segmented_fold_until.hpp000444000765000024 471212161110702 26204 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_FOLD_UNTIL_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_FOLD_UNTIL_HPP_INCLUDED #include #include #include #include #include #include #include #include namespace boost { namespace fusion { //auto segmented_fold_until(seq, state, fun) //{ // return first(segmented_fold_until_impl(seq, state, nil, fun)); //} namespace result_of { template struct segmented_fold_until { typedef detail::segmented_fold_until_impl< Sequence , State , fusion::nil , Fun > filter; typedef typename filter::type type; }; } template typename lazy_disable_if< is_const , result_of::segmented_fold_until >::type segmented_fold_until(Sequence& seq, State const& state, Fun const& fun) { typedef typename result_of::segmented_fold_until::filter filter; return filter::call(seq, state, fusion::nil(), fun); } template typename result_of::segmented_fold_until::type segmented_fold_until(Sequence const& seq, State const& state, Fun const& fun) { typedef typename result_of::segmented_fold_until::filter filter; return filter::call(seq, state, fusion::nil(), fun); } }} #endif sequence_base.hpp000444000765000024 303212161110600 24603 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Tobias Schwinger Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SEQUENCE_BASE_04182005_0737) #define FUSION_SEQUENCE_BASE_04182005_0737 #include namespace boost { namespace fusion { namespace detail { struct from_sequence_convertible_type {}; } template struct sequence_base { Sequence const& derived() const { return static_cast(*this); } Sequence& derived() { return static_cast(*this); } operator detail::from_sequence_convertible_type()const { return detail::from_sequence_convertible_type(); } }; struct fusion_sequence_tag; }} namespace boost { namespace mpl { // Deliberately break mpl::begin, so it doesn't lie that a Fusion sequence // is not an MPL sequence by returning mpl::void_. // In other words: Fusion Sequences are always MPL Sequences, but they can // be incompletely defined. template<> struct begin_impl< boost::fusion::fusion_sequence_tag >; }} #endif tag_of.hpp000444000765000024 443612161110620 23253 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_TAG_OF_09232005_0845) #define FUSION_TAG_OF_09232005_0845 #include #include #include #include #include #include #include #include #include #include namespace boost { template class array; // forward namespace tuples { struct null_type; template < class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9 > class tuple; template struct cons; } } namespace boost { namespace fusion { struct non_fusion_tag; struct mpl_sequence_tag; namespace detail { BOOST_MPL_HAS_XXX_TRAIT_DEF(fusion_tag) template struct tag_of_impl : mpl::if_, mpl::identity, mpl::identity >::type {}; template struct tag_of_impl< Sequence , typename boost::enable_if >::type> { typedef typename Sequence::fusion_tag type; }; } namespace traits { template struct tag_of : boost::fusion::detail::tag_of_impl {}; } namespace detail { template struct tag_of : traits::tag_of::type> {}; } }} #endif tag_of_fwd.hpp000444000765000024 124412161110654 24114 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_TAG_OF_FWD_31122005_1445) #define BOOST_FUSION_TAG_OF_FWD_31122005_1445 namespace boost { namespace fusion { namespace traits { template struct tag_of; } }} #endif void.hpp000444000765000024 104312161110611 22744 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SUPPORT_VOID_20070706_2125) #define BOOST_FUSION_SUPPORT_VOID_20070706_2125 namespace boost { namespace fusion { struct void_ {}; }} #endif detail000755000765000024 012161110670 22406 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/supportaccess.hpp000444000765000024 270612161110607 24522 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ACCESS_04182005_0737) #define FUSION_ACCESS_04182005_0737 #include #include namespace boost { namespace fusion { namespace detail { template struct ref_result { typedef typename add_reference::type type; }; template struct cref_result { typedef typename add_reference< typename add_const::type >::type type; }; template struct call_param { typedef T const& type; }; template struct call_param { typedef T& type; }; template struct call_param { typedef T const& type; }; template struct call_param { typedef T const& type; }; template struct call_param { typedef T const& type; }; }}} #endif as_fusion_element.hpp000444000765000024 233712161110637 26763 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/detail/*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_AS_FUSION_ELEMENT_05052005_0338) #define FUSION_AS_FUSION_ELEMENT_05052005_0338 #include namespace boost { namespace fusion { namespace detail { template struct as_fusion_element { typedef T type; }; template struct as_fusion_element > { typedef T& type; }; template struct as_fusion_element { typedef const T(&type)[N]; }; template struct as_fusion_element { typedef const volatile T(&type)[N]; }; template struct as_fusion_element { typedef const volatile T(&type)[N]; }; }}} #endif category_of.hpp000444000765000024 121112161110611 25543 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_CATEGORY_OF_07212005_1025) #define FUSION_CATEGORY_OF_07212005_1025 namespace boost { namespace fusion { namespace detail { template struct fusion_category_of { typedef typename T::category type; }; }}} #endif is_mpl_sequence.hpp000444000765000024 173712161110615 26436 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105) #define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105 #include #include #include #include #include namespace boost { namespace fusion { namespace detail { template struct is_mpl_sequence : mpl::and_< mpl::not_ > , mpl::is_sequence > {}; }}} #endif is_view.hpp000444000765000024 117412161110615 24723 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_IS_VIEW_03202006_0018) #define FUSION_IS_VIEW_03202006_0018 namespace boost { namespace fusion { namespace detail { template struct fusion_is_view { typedef typename T::is_view type; }; }}} #endif mpl_iterator_category.hpp000444000765000024 343412161110670 27656 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_MPL_ITERATOR_CATEGORY_07212005_0923) #define FUSION_MPL_ITERATOR_CATEGORY_07212005_0923 namespace boost { namespace mpl { struct forward_iterator_tag; struct bidirectional_iterator_tag; struct random_access_iterator_tag; }} namespace boost { namespace fusion { struct forward_traversal_tag; struct bidirectional_traversal_tag; struct random_access_traversal_tag; }} namespace boost { namespace fusion { namespace detail { template struct mpl_iterator_category; template <> struct mpl_iterator_category { typedef forward_traversal_tag type; }; template <> struct mpl_iterator_category { typedef bidirectional_traversal_tag type; }; template <> struct mpl_iterator_category { typedef random_access_traversal_tag type; }; template <> struct mpl_iterator_category { typedef forward_traversal_tag type; }; template <> struct mpl_iterator_category { typedef bidirectional_traversal_tag type; }; template <> struct mpl_iterator_category { typedef random_access_traversal_tag type; }; }}} #endif pp_round.hpp000444000765000024 600512161110647 25107 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/detail/*============================================================================= Copyright (c) 2011 Thomas Heller Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_BOOST_FUSION_SUPPORT_PP_ROUND_HPP #define BOOST_BOOST_FUSION_SUPPORT_PP_ROUND_HPP #include #include #include #define BOOST_FUSION_PP_ROUND_UP(N) \ BOOST_PP_CAT(BOOST_FUSION_PP_DO_ROUND_UP_, N)() \ /**/ #define BOOST_FUSION_PP_DO_ROUND_UP_0() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_1() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_2() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_3() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_4() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_5() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_6() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_7() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_8() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_9() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_10() 10 #define BOOST_FUSION_PP_DO_ROUND_UP_11() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_12() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_13() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_14() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_15() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_16() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_17() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_18() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_19() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_20() 20 #define BOOST_FUSION_PP_DO_ROUND_UP_21() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_22() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_23() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_24() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_25() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_26() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_27() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_28() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_29() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_30() 30 #define BOOST_FUSION_PP_DO_ROUND_UP_31() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_32() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_33() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_34() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_35() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_36() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_37() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_38() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_39() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_40() 40 #define BOOST_FUSION_PP_DO_ROUND_UP_41() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_42() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_43() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_44() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_45() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_46() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_47() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_48() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_49() 50 #define BOOST_FUSION_PP_DO_ROUND_UP_50() 50 #endif segmented_fold_until_impl.hpp000444000765000024 3224212161110661 30512 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/support/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_FOLD_UNTIL_IMPL_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_FOLD_UNTIL_IMPL_HPP_INCLUDED #include #include #include #include #include #include #include #include #include #include #include #include #include #include // fun(seq, state, context) // seq: a non-segmented range // state: the state of the fold so far // context: the path to the current range // // returns: (state', fcontinue) namespace boost { namespace fusion { template struct iterator_range; template struct segmented_iterator; namespace result_of { template struct make_segmented_iterator { typedef iterator_range< Cur , typename result_of::end< typename remove_reference< typename add_const< typename result_of::deref< typename Context::car_type::begin_type >::type >::type >::type >::type > range_type; typedef segmented_iterator > type; }; } template typename result_of::make_segmented_iterator::type make_segmented_iterator(Cur const& cur, Context const& context) { typedef result_of::make_segmented_iterator impl_type; typedef typename impl_type::type type; typedef typename impl_type::range_type range_type; return type(cons(range_type(cur, fusion::end(*context.car.first)), context)); } namespace detail { template < typename Begin , typename End , typename State , typename Context , typename Fun , bool IsEmpty > struct segmented_fold_until_iterate_skip_empty; template < typename Begin , typename End , typename State , typename Context , typename Fun , bool IsDone = result_of::equal_to::type::value > struct segmented_fold_until_iterate; template < typename Sequence , typename State , typename Context , typename Fun , bool IsSegmented = traits::is_segmented::type::value > struct segmented_fold_until_impl; template struct segmented_fold_until_on_segments; //auto push_context(cur, end, context) //{ // return push_back(context, segment_sequence(iterator_range(cur, end))); //} template struct push_context { typedef iterator_range range_type; typedef cons type; static type call(Cur const& cur, End const& end, Context const& context) { return cons(range_type(cur, end), context); } }; //auto make_segmented_iterator(cur, end, context) //{ // return segmented_iterator(push_context(cur, end, context)); //} // //auto segmented_fold_until_impl(seq, state, context, fun) //{ // if (is_segmented(seq)) // { // segmented_fold_until_on_segments(segments(seq), state, context, fun); // } // else // { // return fun(seq, state, context); // } //} template < typename Sequence , typename State , typename Context , typename Fun , bool IsSegmented > struct segmented_fold_until_impl { typedef segmented_fold_until_on_segments< typename remove_reference< typename add_const< typename result_of::segments::type >::type >::type , State , Context , Fun > impl; typedef typename impl::type type; typedef typename impl::continue_type continue_type; static type call(Sequence& seq, State const& state, Context const& context, Fun const& fun) { return impl::call(fusion::segments(seq), state, context, fun); } }; template < typename Sequence , typename State , typename Context , typename Fun > struct segmented_fold_until_impl { typedef typename Fun::template apply apply_type; typedef typename apply_type::type type; typedef typename apply_type::continue_type continue_type; static type call(Sequence& seq, State const& state, Context const& context, Fun const& fun) { return apply_type::call(seq, state, context, fun); } }; //auto segmented_fold_until_on_segments(segs, state, context, fun) //{ // auto cur = begin(segs), end = end(segs); // for (; cur != end; ++cur) // { // if (empty(*cur)) // continue; // auto context` = push_context(cur, end, context); // state = segmented_fold_until_impl(*cur, state, context`, fun); // if (!second(state)) // return state; // } //} template struct continue_wrap { typedef typename Apply::continue_type type; }; template struct segmented_fold_until_iterate_skip_empty { // begin != end and !empty(*begin) typedef push_context push_context_impl; typedef typename push_context_impl::type next_context_type; typedef segmented_fold_until_impl< typename remove_reference< typename add_const< typename result_of::deref::type >::type >::type , State , next_context_type , Fun > fold_recurse_impl; typedef typename fold_recurse_impl::type next_state_type; typedef segmented_fold_until_iterate< typename result_of::next::type , End , next_state_type , Context , Fun > next_iteration_impl; typedef typename mpl::eval_if< typename fold_recurse_impl::continue_type , next_iteration_impl , mpl::identity >::type type; typedef typename mpl::eval_if< typename fold_recurse_impl::continue_type , continue_wrap , mpl::identity >::type continue_type; static type call(Begin const& beg, End const& end, State const& state , Context const& context, Fun const& fun) { return call(beg, end, state, context, fun, typename fold_recurse_impl::continue_type()); } static type call(Begin const& beg, End const& end, State const& state , Context const& context, Fun const& fun, mpl::true_) // continue { return next_iteration_impl::call( fusion::next(beg) , end , fold_recurse_impl::call( *beg , state , push_context_impl::call(beg, end, context) , fun) , context , fun); } static type call(Begin const& beg, End const& end, State const& state , Context const& context, Fun const& fun, mpl::false_) // break { return fold_recurse_impl::call( *beg , state , push_context_impl::call(beg, end, context) , fun); } }; template struct segmented_fold_until_iterate_skip_empty { typedef segmented_fold_until_iterate< typename result_of::next::type , End , State , Context , Fun > impl; typedef typename impl::type type; typedef typename impl::continue_type continue_type; static type call(Begin const& beg, End const& end, State const& state , Context const& context, Fun const& fun) { return impl::call(fusion::next(beg), end, state, context, fun); } }; template struct segmented_fold_until_iterate { typedef typename result_of::empty< typename remove_reference< typename result_of::deref::type >::type >::type empty_type; typedef segmented_fold_until_iterate_skip_empty impl; typedef typename impl::type type; typedef typename impl::continue_type continue_type; static type call(Begin const& beg, End const& end, State const& state , Context const& context, Fun const& fun) { return impl::call(beg, end, state, context, fun); } }; template struct segmented_fold_until_iterate { typedef State type; typedef mpl::true_ continue_type; static type call(Begin const&, End const&, State const& state , Context const&, Fun const&) { return state; } }; template struct segmented_fold_until_on_segments { typedef segmented_fold_until_iterate< typename result_of::begin::type , typename result_of::end::type , State , Context , Fun > impl; typedef typename impl::type type; typedef typename impl::continue_type continue_type; static type call(Segments& segs, State const& state, Context const& context, Fun const& fun) { return impl::call(fusion::begin(segs), fusion::end(segs), state, context, fun); } }; } }} #endif tuple000755000765000024 012161110700 20553 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusionmake_tuple.hpp000444000765000024 566012161110700 23556 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_PP_IS_ITERATING #if !defined(FUSION_MAKE_TUPLE_10032005_0843) #define FUSION_MAKE_TUPLE_10032005_0843 #include #include #include #include #include namespace boost { namespace fusion { inline tuple<> make_tuple() { return tuple<>(); } }} #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_tuple" FUSION_MAX_VECTOR_SIZE_STR ".hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { #define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \ typename detail::as_fusion_element::type #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #include BOOST_PP_ITERATE() #undef BOOST_FUSION_AS_FUSION_ELEMENT }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// // // Preprocessor vertical repetition code // /////////////////////////////////////////////////////////////////////////////// #define N BOOST_PP_ITERATION() template inline tuple make_tuple(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _)) { return tuple( BOOST_PP_ENUM_PARAMS(N, _)); } #undef N #endif // defined(BOOST_PP_IS_ITERATING) tuple.hpp000444000765000024 713112161110641 22560 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_TUPLE_10032005_0810) #define FUSION_TUPLE_10032005_0810 #include #include #include #include #include #include #include #include #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/tuple" FUSION_MAX_VECTOR_SIZE_STR ".hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { template struct tuple : vector { typedef vector< BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> base_type; tuple() : base_type() {} tuple(tuple const& rhs) : base_type(rhs) {} template tuple(std::pair const& rhs) : base_type(rhs) {} #include template tuple& operator=(T const& rhs) { base_type::operator=(rhs); return *this; } tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(std::pair const& rhs) { base_type::operator=(rhs); return *this; } }; template struct tuple_size : result_of::size {}; template struct tuple_element : result_of::value_at_c {}; template inline typename lazy_disable_if< is_const , result_of::at_c >::type get(Tuple& tup) { return at_c(tup); } template inline typename result_of::at_c::type get(Tuple const& tup) { return at_c(tup); } }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif tuple_fwd.hpp000444000765000024 347112161110637 23430 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_TUPLE_FORWARD_10032005_0956) #define FUSION_TUPLE_FORWARD_10032005_0956 #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/tuple" FUSION_MAX_VECTOR_SIZE_STR "_fwd.hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { struct void_; template < BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( FUSION_MAX_VECTOR_SIZE, typename T, void_) > struct tuple; }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif tuple_tie.hpp000444000765000024 520612161110607 23424 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_PP_IS_ITERATING #if !defined(FUSION_TUPLE_TIE_10032005_0846) #define FUSION_TUPLE_TIE_10032005_0846 #include #include #include #include #include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include #else #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/tuple_tie" FUSION_MAX_VECTOR_SIZE_STR ".hpp") #endif /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif namespace boost { namespace fusion { #define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)& #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #include BOOST_PP_ITERATE() #undef BOOST_FUSION_REF }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// // // Preprocessor vertical repetition code // /////////////////////////////////////////////////////////////////////////////// #define N BOOST_PP_ITERATION() template inline tuple tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _)) { return tuple( BOOST_PP_ENUM_PARAMS(N, _)); } #undef N #endif // defined(BOOST_PP_IS_ITERATING) detail000755000765000024 012161110676 22031 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tupletuple_expand.hpp000444000765000024 325012161110676 25367 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_PP_IS_ITERATING #if !defined(FUSION_TUPLE_EXPAND_10032005_0815) #define FUSION_TUPLE_EXPAND_10032005_0815 #include #include #include #define BOOST_PP_FILENAME_1 \ #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #include BOOST_PP_ITERATE() #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// // // Preprocessor vertical repetition code // /////////////////////////////////////////////////////////////////////////////// #define N BOOST_PP_ITERATION() #if N == 1 explicit #endif tuple(BOOST_PP_ENUM_BINARY_PARAMS( N, typename detail::call_param::type _)) : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } #undef N #endif // defined(BOOST_PP_IS_ITERATING) preprocessed000755000765000024 012161110700 24513 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detailmake_tuple.hpp000444000765000024 177712161110611 27524 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_VECTOR_SIZE <= 10 #include #elif FUSION_MAX_VECTOR_SIZE <= 20 #include #elif FUSION_MAX_VECTOR_SIZE <= 30 #include #elif FUSION_MAX_VECTOR_SIZE <= 40 #include #elif FUSION_MAX_VECTOR_SIZE <= 50 #include #else #error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" #endif make_tuple10.hpp000444000765000024 2040312161110602 27670 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple::type> make_tuple(T0 const& _0) { return tuple::type>( _0); } template inline tuple::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1) { return tuple::type , typename detail::as_fusion_element::type>( _0 , _1); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } }} make_tuple20.hpp000444000765000024 7160312161110656 27712 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple::type> make_tuple(T0 const& _0) { return tuple::type>( _0); } template inline tuple::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1) { return tuple::type , typename detail::as_fusion_element::type>( _0 , _1); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); } }} make_tuple30.hpp000444000765000024 17513312161110667 27740 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple::type> make_tuple(T0 const& _0) { return tuple::type>( _0); } template inline tuple::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1) { return tuple::type , typename detail::as_fusion_element::type>( _0 , _1); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); } }} make_tuple40.hpp000444000765000024 33261312161110636 27733 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple::type> make_tuple(T0 const& _0) { return tuple::type>( _0); } template inline tuple::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1) { return tuple::type , typename detail::as_fusion_element::type>( _0 , _1); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); } }} make_tuple50.hpp000444000765000024 52242312161110616 27732 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple::type> make_tuple(T0 const& _0) { return tuple::type>( _0); } template inline tuple::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1) { return tuple::type , typename detail::as_fusion_element::type>( _0 , _1); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); } template inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49) { return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); } }} tuple.hpp000444000765000024 174412161110651 26525 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_VECTOR_SIZE <= 10 #include #elif FUSION_MAX_VECTOR_SIZE <= 20 #include #elif FUSION_MAX_VECTOR_SIZE <= 30 #include #elif FUSION_MAX_VECTOR_SIZE <= 40 #include #elif FUSION_MAX_VECTOR_SIZE <= 50 #include #else #error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" #endiftuple10.hpp000444000765000024 2200312161110622 26673 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct tuple : vector { typedef vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> base_type; tuple() : base_type() {} tuple(tuple const& rhs) : base_type(rhs) {} template tuple(std::pair const& rhs) : base_type(rhs) {} explicit tuple(typename detail::call_param::type _0) : base_type(_0) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) : base_type(_0 , _1) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : base_type(_0 , _1 , _2) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : base_type(_0 , _1 , _2 , _3) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : base_type(_0 , _1 , _2 , _3 , _4) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(T const& rhs) { base_type::operator=(rhs); return *this; } tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(std::pair const& rhs) { base_type::operator=(rhs); return *this; } }; template struct tuple_size : result_of::size {}; template struct tuple_element : result_of::value_at_c {}; template inline typename lazy_disable_if< is_const , result_of::at_c >::type get(Tuple& tup) { return at_c(tup); } template inline typename result_of::at_c::type get(Tuple const& tup) { return at_c(tup); } }} tuple10_fwd.hpp000444000765000024 135512161110612 27521 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ > struct tuple; }} tuple20.hpp000444000765000024 6207312161110673 26715 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct tuple : vector { typedef vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> base_type; tuple() : base_type() {} tuple(tuple const& rhs) : base_type(rhs) {} template tuple(std::pair const& rhs) : base_type(rhs) {} explicit tuple(typename detail::call_param::type _0) : base_type(_0) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) : base_type(_0 , _1) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : base_type(_0 , _1 , _2) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : base_type(_0 , _1 , _2 , _3) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : base_type(_0 , _1 , _2 , _3 , _4) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(T const& rhs) { base_type::operator=(rhs); return *this; } tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(std::pair const& rhs) { base_type::operator=(rhs); return *this; } }; template struct tuple_size : result_of::size {}; template struct tuple_element : result_of::value_at_c {}; template inline typename lazy_disable_if< is_const , result_of::at_c >::type get(Tuple& tup) { return at_c(tup); } template inline typename result_of::at_c::type get(Tuple const& tup) { return at_c(tup); } }} tuple20_fwd.hpp000444000765000024 172312161110700 27517 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ > struct tuple; }} tuple30.hpp000444000765000024 14445312161110641 26734 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct tuple : vector { typedef vector< 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> base_type; tuple() : base_type() {} tuple(tuple const& rhs) : base_type(rhs) {} template tuple(std::pair const& rhs) : base_type(rhs) {} explicit tuple(typename detail::call_param::type _0) : base_type(_0) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) : base_type(_0 , _1) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : base_type(_0 , _1 , _2) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : base_type(_0 , _1 , _2 , _3) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : base_type(_0 , _1 , _2 , _3 , _4) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(T const& rhs) { base_type::operator=(rhs); return *this; } tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(std::pair const& rhs) { base_type::operator=(rhs); return *this; } }; template struct tuple_size : result_of::size {}; template struct tuple_element : result_of::value_at_c {}; template inline typename lazy_disable_if< is_const , result_of::at_c >::type get(Tuple& tup) { return at_c(tup); } template inline typename result_of::at_c::type get(Tuple const& tup) { return at_c(tup); } }} tuple30_fwd.hpp000444000765000024 227112161110635 27526 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ > struct tuple; }} tuple40.hpp000444000765000024 25132312161110610 26724 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct tuple : vector { typedef vector< 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> base_type; tuple() : base_type() {} tuple(tuple const& rhs) : base_type(rhs) {} template tuple(std::pair const& rhs) : base_type(rhs) {} explicit tuple(typename detail::call_param::type _0) : base_type(_0) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) : base_type(_0 , _1) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : base_type(_0 , _1 , _2) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : base_type(_0 , _1 , _2 , _3) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : base_type(_0 , _1 , _2 , _3 , _4) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(T const& rhs) { base_type::operator=(rhs); return *this; } tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(std::pair const& rhs) { base_type::operator=(rhs); return *this; } }; template struct tuple_size : result_of::size {}; template struct tuple_element : result_of::value_at_c {}; template inline typename lazy_disable_if< is_const , result_of::at_c >::type get(Tuple& tup) { return at_c(tup); } template inline typename result_of::at_c::type get(Tuple const& tup) { return at_c(tup); } }} tuple40_fwd.hpp000444000765000024 263712161110650 27532 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ > struct tuple; }} tuple50.hpp000444000765000024 40046312161110616 26734 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template struct tuple : vector { typedef vector< 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 , T49> base_type; tuple() : base_type() {} tuple(tuple const& rhs) : base_type(rhs) {} template tuple(std::pair const& rhs) : base_type(rhs) {} explicit tuple(typename detail::call_param::type _0) : base_type(_0) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) : base_type(_0 , _1) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) : base_type(_0 , _1 , _2) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) : base_type(_0 , _1 , _2 , _3) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) : base_type(_0 , _1 , _2 , _3 , _4) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {} template tuple(tuple const& rhs) : base_type(rhs) {} template tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(T const& rhs) { base_type::operator=(rhs); return *this; } tuple& operator=(tuple const& rhs) { base_type::operator=(rhs); return *this; } template tuple& operator=(std::pair const& rhs) { base_type::operator=(rhs); return *this; } }; template struct tuple_size : result_of::size {}; template struct tuple_element : result_of::value_at_c {}; template inline typename lazy_disable_if< is_const , result_of::at_c >::type get(Tuple& tup) { return at_c(tup); } template inline typename result_of::at_c::type get(Tuple const& tup) { return at_c(tup); } }} tuple50_fwd.hpp000444000765000024 320512161110613 27522 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { struct void_; template < typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ > struct tuple; }} tuple_fwd.hpp000444000765000024 177212161110653 27370 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_VECTOR_SIZE <= 10 #include #elif FUSION_MAX_VECTOR_SIZE <= 20 #include #elif FUSION_MAX_VECTOR_SIZE <= 30 #include #elif FUSION_MAX_VECTOR_SIZE <= 40 #include #elif FUSION_MAX_VECTOR_SIZE <= 50 #include #else #error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" #endif tuple_tie.hpp000444000765000024 177212161110657 27375 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ #if FUSION_MAX_VECTOR_SIZE <= 10 #include #elif FUSION_MAX_VECTOR_SIZE <= 20 #include #elif FUSION_MAX_VECTOR_SIZE <= 30 #include #elif FUSION_MAX_VECTOR_SIZE <= 40 #include #elif FUSION_MAX_VECTOR_SIZE <= 50 #include #else #error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" #endif tuple_tie10.hpp000444000765000024 701412161110654 27526 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple tie(T0 & _0) { return tuple( _0); } template inline tuple tie(T0 & _0 , T1 & _1) { return tuple( _0 , _1); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2) { return tuple( _0 , _1 , _2); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) { return tuple( _0 , _1 , _2 , _3); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) { return tuple( _0 , _1 , _2 , _3 , _4); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) { return tuple( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } }} tuple_tie20.hpp000444000765000024 2563112161110646 27555 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple tie(T0 & _0) { return tuple( _0); } template inline tuple tie(T0 & _0 , T1 & _1) { return tuple( _0 , _1); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2) { return tuple( _0 , _1 , _2); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) { return tuple( _0 , _1 , _2 , _3); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) { return tuple( _0 , _1 , _2 , _3 , _4); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) { return tuple( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); } }} tuple_tie30.hpp000444000765000024 5560212161110700 27546 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple tie(T0 & _0) { return tuple( _0); } template inline tuple tie(T0 & _0 , T1 & _1) { return tuple( _0 , _1); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2) { return tuple( _0 , _1 , _2); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) { return tuple( _0 , _1 , _2 , _3); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) { return tuple( _0 , _1 , _2 , _3 , _4); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) { return tuple( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); } }} tuple_tie40.hpp000444000765000024 11670712161110644 27602 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple tie(T0 & _0) { return tuple( _0); } template inline tuple tie(T0 & _0 , T1 & _1) { return tuple( _0 , _1); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2) { return tuple( _0 , _1 , _2); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) { return tuple( _0 , _1 , _2 , _3); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) { return tuple( _0 , _1 , _2 , _3 , _4); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) { return tuple( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); } }} tuple_tie50.hpp000444000765000024 17115012161110601 27565 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/tuple/detail/preprocessed/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is an auto-generated file. Do not edit! ==============================================================================*/ namespace boost { namespace fusion { template inline tuple tie(T0 & _0) { return tuple( _0); } template inline tuple tie(T0 & _0 , T1 & _1) { return tuple( _0 , _1); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2) { return tuple( _0 , _1 , _2); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) { return tuple( _0 , _1 , _2 , _3); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) { return tuple( _0 , _1 , _2 , _3 , _4); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) { return tuple( _0 , _1 , _2 , _3 , _4 , _5); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); } template inline tuple tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49) { return tuple( _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); } }} view000755000765000024 012161110642 20401 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusioniterator_range.hpp000444000765000024 106712161110642 24260 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SEQUENCE_VIEW_ITERATOR_RANGE_10022005_0610) #define FUSION_SEQUENCE_VIEW_ITERATOR_RANGE_10022005_0610 #include #endif iterator_range000755000765000024 012161110663 23411 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/viewiterator_range.hpp000444000765000024 446412161110663 27274 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_ITERATOR_RANGE_05062005_1224) #define FUSION_ITERATOR_RANGE_05062005_1224 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined (BOOST_MSVC) # pragma warning(push) # pragma warning (disable: 4512) // assignment operator could not be generated. #endif namespace boost { namespace fusion { struct iterator_range_tag; struct fusion_sequence_tag; template struct iterator_range : sequence_base > { typedef typename convert_iterator::type begin_type; typedef typename convert_iterator::type end_type; typedef iterator_range_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef mpl::true_ is_view; typedef typename traits::category_of::type category; iterator_range(First const& in_first, Last const& in_last) : first(convert_iterator::call(in_first)) , last(convert_iterator::call(in_last)) {} begin_type first; end_type last; }; }} #if defined (BOOST_MSVC) # pragma warning(pop) #endif #endif detail000755000765000024 012161110702 24645 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_rangeat_impl.hpp000444000765000024 246112161110702 27143 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/detail/*============================================================================= Copyright (c) 2007 Tobias Schwinger Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_ITERATOR_RANGE_AT_IMPL_HPP_INCLUDED) #define BOOST_FUSION_ITERATOR_RANGE_AT_IMPL_HPP_INCLUDED #include #include namespace boost { namespace fusion { struct iterator_range_tag; namespace extension { template struct at_impl; template <> struct at_impl { template struct apply { typedef typename Seq::begin_type begin_type; typedef typename result_of::advance::type pos; typedef typename result_of::deref::type type; static type call(Seq& s) { return * fusion::advance(s.first); } }; }; } }} #endif begin_impl.hpp000444000765000024 202212161110607 27620 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_BEGIN_IMPL_05062005_1226) #define FUSION_BEGIN_IMPL_05062005_1226 namespace boost { namespace fusion { struct iterator_range_tag; namespace extension { template struct begin_impl; template <> struct begin_impl { template struct apply { typedef typename Sequence::begin_type type; static type call(Sequence& s) { return s.first; } }; }; } }} #endif end_impl.hpp000444000765000024 200712161110610 27277 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_END_IMPL_05062005_1226) #define FUSION_END_IMPL_05062005_1226 namespace boost { namespace fusion { struct iterator_range_tag; namespace extension { template struct end_impl; template <> struct end_impl { template struct apply { typedef typename Sequence::end_type type; static type call(Sequence& s) { return s.last; } }; }; } }} #endif is_segmented_impl.hpp000444000765000024 400112161110622 31176 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED) #define BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED #include #include namespace boost { namespace fusion { struct iterator_range_tag; template struct segmented_iterator; namespace extension { template struct is_segmented_impl; // An iterator_range of segmented_iterators is segmented template <> struct is_segmented_impl { private: template struct is_segmented_iterator : mpl::false_ {}; template struct is_segmented_iterator : is_segmented_iterator {}; template struct is_segmented_iterator : is_segmented_iterator {}; template struct is_segmented_iterator > : mpl::true_ {}; public: template struct apply : is_segmented_iterator { BOOST_MPL_ASSERT_RELATION( is_segmented_iterator::value , == , is_segmented_iterator::value); }; }; } }} #endif segmented_iterator_range.hpp000444000765000024 4664512161110666 32623 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_RANGE_HPP_INCLUDED) #define BOOST_FUSION_SEGMENTED_ITERATOR_RANGE_HPP_INCLUDED #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Invariants: // - Each segmented iterator has a stack // - Each value in the stack is an iterator range // - The range at the top of the stack points to values // - All other ranges point to ranges // - The front of each range in the stack (besides the // topmost) is the range above it namespace boost { namespace fusion { template struct iterator_range; namespace result_of { template struct push_back; template struct push_front; } template typename lazy_enable_if< traits::is_sequence , result_of::push_back >::type push_back(Sequence const& seq, T const& x); template typename lazy_enable_if< traits::is_sequence , result_of::push_front >::type push_front(Sequence const& seq, T const& x); }} namespace boost { namespace fusion { namespace detail { //auto make_segment_sequence_front(stack_begin) //{ // switch (size(stack_begin)) // { // case 1: // return nil; // case 2: // // car(cdr(stack_begin)) is a range over values. // assert(end(front(car(stack_begin))) == end(car(cdr(stack_begin)))); // return iterator_range(begin(car(cdr(stack_begin))), end(front(car(stack_begin)))); // default: // // car(cdr(stack_begin)) is a range over segments. We replace the // // front with a view that is restricted. // assert(end(segments(front(car(stack_begin)))) == end(car(cdr(stack_begin)))); // return segment_sequence( // push_front( // // The following could be a segment_sequence. It then gets wrapped // // in a single_view, and push_front puts it in a join_view with the // // following iterator_range. // iterator_range(next(begin(car(cdr(stack_begin)))), end(segments(front(car(stack_begin))))), // make_segment_sequence_front(cdr(stack_begin)))); // } //} template struct make_segment_sequence_front { // assert(end(segments(front(car(stack_begin)))) == end(car(cdr(stack_begin)))); BOOST_MPL_ASSERT(( result_of::equal_to< typename result_of::end< typename remove_reference< typename add_const< typename result_of::segments< typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type >::type >::type >::type >::type , typename Stack::cdr_type::car_type::end_type >)); typedef iterator_range< typename result_of::next< typename Stack::cdr_type::car_type::begin_type >::type , typename result_of::end< typename remove_reference< typename add_const< typename result_of::segments< typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type >::type >::type >::type >::type > rest_type; typedef make_segment_sequence_front recurse; typedef segment_sequence< typename result_of::push_front< rest_type const , typename recurse::type >::type > type; static type call(Stack const& stack) { //return segment_sequence( // push_front( // iterator_range(next(begin(car(cdr(stack_begin)))), end(segments(front(car(stack_begin))))), // make_segment_sequence_front(cdr(stack_begin)))); return type( fusion::push_front( rest_type(fusion::next(stack.cdr.car.first), fusion::end(fusion::segments(*stack.car.first))) , recurse::call(stack.cdr))); } }; template struct make_segment_sequence_front { // assert(end(front(car(stack_begin))) == end(car(cdr(stack_begin)))); BOOST_MPL_ASSERT(( result_of::equal_to< typename result_of::end< typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type >::type , typename Stack::cdr_type::car_type::end_type >)); typedef iterator_range< typename Stack::cdr_type::car_type::begin_type , typename result_of::end< typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type >::type > type; static type call(Stack const& stack) { // return iterator_range(begin(car(cdr(stack_begin))), end(front(car(stack_begin)))); return type(stack.cdr.car.first, fusion::end(*stack.car.first)); } }; template struct make_segment_sequence_front { typedef typename Stack::cdr_type type; // nil static type call(Stack const &stack) { return stack.cdr; } }; //auto make_segment_sequence_back(stack_end) //{ // switch (size(stack_end)) // { // case 1: // return nil; // case 2: // // car(cdr(stack_back)) is a range over values. // assert(end(front(car(stack_end))) == end(car(cdr(stack_end)))); // return iterator_range(begin(front(car(stack_end))), begin(car(cdr(stack_end)))); // default: // // car(cdr(stack_begin)) is a range over segments. We replace the // // back with a view that is restricted. // assert(end(segments(front(car(stack_end)))) == end(car(cdr(stack_end)))); // return segment_sequence( // push_back( // iterator_range(begin(segments(front(car(stack_end)))), begin(car(cdr(stack_end)))), // make_segment_sequence_back(cdr(stack_end)))); // } //} template struct make_segment_sequence_back { // assert(end(segments(front(car(stack_begin)))) == end(car(cdr(stack_begin)))); BOOST_MPL_ASSERT(( result_of::equal_to< typename result_of::end< typename remove_reference< typename add_const< typename result_of::segments< typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type >::type >::type >::type >::type , typename Stack::cdr_type::car_type::end_type >)); typedef iterator_range< typename result_of::begin< typename remove_reference< typename add_const< typename result_of::segments< typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type >::type >::type >::type >::type , typename Stack::cdr_type::car_type::begin_type > rest_type; typedef make_segment_sequence_back recurse; typedef segment_sequence< typename result_of::push_back< rest_type const , typename recurse::type >::type > type; static type call(Stack const& stack) { // return segment_sequence( // push_back( // iterator_range(begin(segments(front(car(stack_end)))), begin(car(cdr(stack_end)))), // make_segment_sequence_back(cdr(stack_end)))); return type( fusion::push_back( rest_type(fusion::begin(fusion::segments(*stack.car.first)), stack.cdr.car.first) , recurse::call(stack.cdr))); } }; template struct make_segment_sequence_back { // assert(end(front(car(stack_end))) == end(car(cdr(stack_end)))); BOOST_MPL_ASSERT(( result_of::equal_to< typename result_of::end< typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type >::type , typename Stack::cdr_type::car_type::end_type >)); typedef iterator_range< typename result_of::begin< typename remove_reference< typename add_const< typename result_of::deref< typename Stack::car_type::begin_type >::type >::type >::type >::type , typename Stack::cdr_type::car_type::begin_type > type; static type call(Stack const& stack) { // return iterator_range(begin(front(car(stack_end))), begin(car(cdr(stack_end)))); return type(fusion::begin(*stack.car.first), stack.cdr.car.first); } }; template struct make_segment_sequence_back { typedef typename Stack::cdr_type type; // nil static type call(Stack const& stack) { return stack.cdr; } }; //auto make_segmented_range_reduce(stack_begin, stack_end) //{ // if (size(stack_begin) == 1 && size(stack_end) == 1) // { // return segment_sequence( // single_view( // iterator_range(begin(car(stack_begin)), begin(car(stack_end))))); // } // else // { // // We are in the case where both begin_stack and/or end_stack have // // more than one element. Throw away any part of the tree where // // begin and end refer to the same segment. // if (begin(car(stack_begin)) == begin(car(stack_end))) // { // return make_segmented_range_reduce(cdr(stack_begin), cdr(stack_end)); // } // else // { // // We are in the case where begin_stack and end_stack (a) have // // more than one element each, and (b) they point to different // // segments. We must construct a segmented sequence. // return segment_sequence( // push_back( // push_front( // iterator_range( // fusion::next(begin(car(stack_begin))), // begin(car(stack_end))), // a range of (possibly segmented) ranges. // make_segment_sequence_front(stack_begin)), // should be a (possibly segmented) range. // make_segment_sequence_back(stack_end))); // should be a (possibly segmented) range. // } // } //} template < typename StackBegin , typename StackEnd , int StackBeginSize = StackBegin::size::value , int StackEndSize = StackEnd::size::value> struct make_segmented_range_reduce; template < typename StackBegin , typename StackEnd , bool SameSegment = result_of::equal_to< typename StackBegin::car_type::begin_type , typename StackEnd::car_type::begin_type >::type::value> struct make_segmented_range_reduce2 { typedef iterator_range< typename result_of::next< typename StackBegin::car_type::begin_type >::type , typename StackEnd::car_type::begin_type > rest_type; typedef segment_sequence< typename result_of::push_back< typename result_of::push_front< rest_type const , typename make_segment_sequence_front::type >::type const , typename make_segment_sequence_back::type >::type > type; static type call(StackBegin stack_begin, StackEnd stack_end) { //return segment_sequence( // push_back( // push_front( // iterator_range( // fusion::next(begin(car(stack_begin))), // begin(car(stack_end))), // a range of (possibly segmented) ranges. // make_segment_sequence_front(stack_begin)), // should be a (possibly segmented) range. // make_segment_sequence_back(stack_end))); // should be a (possibly segmented) range. return type( fusion::push_back( fusion::push_front( rest_type(fusion::next(stack_begin.car.first), stack_end.car.first) , make_segment_sequence_front::call(stack_begin)) , make_segment_sequence_back::call(stack_end))); } }; template struct make_segmented_range_reduce2 { typedef make_segmented_range_reduce< typename StackBegin::cdr_type , typename StackEnd::cdr_type > impl; typedef typename impl::type type; static type call(StackBegin stack_begin, StackEnd stack_end) { return impl::call(stack_begin.cdr, stack_end.cdr); } }; template struct make_segmented_range_reduce : make_segmented_range_reduce2 {}; template struct make_segmented_range_reduce { typedef iterator_range< typename StackBegin::car_type::begin_type , typename StackEnd::car_type::begin_type > range_type; typedef single_view segment_type; typedef segment_sequence type; static type call(StackBegin stack_begin, StackEnd stack_end) { //return segment_sequence( // single_view( // iterator_range(begin(car(stack_begin)), begin(car(stack_end))))); return type(segment_type(range_type(stack_begin.car.first, stack_end.car.first))); } }; //auto make_segmented_range(begin, end) //{ // return make_segmented_range_reduce(reverse(begin.context), reverse(end.context)); //} template struct make_segmented_range { typedef reverse_cons reverse_begin_cons; typedef reverse_cons reverse_end_cons; typedef make_segmented_range_reduce< typename reverse_begin_cons::type , typename reverse_end_cons::type > impl; typedef typename impl::type type; static type call(Begin const& begin, End const& end) { return impl::call( reverse_begin_cons::call(begin.context) , reverse_end_cons::call(end.context)); } }; }}} #endif segments_impl.hpp000444000765000024 324612161110607 30372 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_ITERATOR_RANGE_SEGMENTS_HPP_INCLUDED) #define BOOST_FUSION_ITERATOR_RANGE_SEGMENTS_HPP_INCLUDED #include #include #include #include namespace boost { namespace fusion { struct iterator_range_tag; namespace extension { template struct segments_impl; template <> struct segments_impl { template struct apply { typedef detail::make_segmented_range< typename Sequence::begin_type , typename Sequence::end_type > impl; BOOST_MPL_ASSERT((traits::is_segmented)); typedef typename result_of::segments::type type; static type call(Sequence & seq) { return fusion::segments(impl::call(seq.first, seq.last)); } }; }; } }} #endif size_impl.hpp000444000765000024 202612161110603 27506 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_ITERATOR_RANGE_SIZE_IMPL_HPP_INCLUDED) #define BOOST_FUSION_ITERATOR_RANGE_SIZE_IMPL_HPP_INCLUDED #include namespace boost { namespace fusion { struct iterator_range_tag; namespace extension { template struct size_impl; template <> struct size_impl { template struct apply : result_of::distance< typename Seq::begin_type, typename Seq::end_type > {}; }; } }} #endif value_at_impl.hpp000444000765000024 226112161110676 30347 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/iterator_range/detail/*============================================================================= Copyright (c) 2007 Tobias Schwinger Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_ITERATOR_RANGE_VALUE_AT_IMPL_HPP_INCLUDED) #define BOOST_FUSION_ITERATOR_RANGE_VALUE_AT_IMPL_HPP_INCLUDED #include #include namespace boost { namespace fusion { struct iterator_range_tag; namespace extension { template struct value_at_impl; template <> struct value_at_impl { template struct apply { typedef typename Seq::begin_type begin_type; typedef typename result_of::advance::type pos; typedef typename result_of::value_of::type type; }; }; } }} #endif joint_view000755000765000024 012161110677 22566 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/viewjoint_view.hpp000444000765000024 610212161110641 25577 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_JOINT_VIEW_07162005_0140) #define FUSION_JOINT_VIEW_07162005_0140 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { struct joint_view_tag; struct forward_traversal_tag; struct fusion_sequence_tag; template struct joint_view : sequence_base > { typedef joint_view_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef typename mpl::eval_if< mpl::and_< traits::is_associative , traits::is_associative > , mpl::inherit2 , mpl::identity >::type category; typedef mpl::true_ is_view; typedef typename result_of::begin::type first_type; typedef typename result_of::end::type last_type; typedef typename result_of::begin::type concat_type; typedef typename result_of::end::type concat_last_type; typedef typename mpl::int_< result_of::size::value + result_of::size::value> size; joint_view(Sequence1& in_seq1, Sequence2& in_seq2) : seq1(in_seq1) , seq2(in_seq2) {} first_type first() const { return fusion::begin(seq1); } concat_type concat() const { return fusion::begin(seq2); } concat_last_type concat_last() const { return fusion::end(seq2); } private: // silence MSVC warning C4512: assignment operator could not be generated joint_view& operator= (joint_view const&); typename mpl::if_, Sequence1, Sequence1&>::type seq1; typename mpl::if_, Sequence2, Sequence2&>::type seq2; }; }} #endif joint_view_fwd.hpp000444000765000024 116512161110677 26454 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_JOINT_VIEW_FWD_HPP_INCLUDED) #define BOOST_FUSION_JOINT_VIEW_FWD_HPP_INCLUDED namespace boost { namespace fusion { struct joint_view_tag; template struct joint_view; }} #endif joint_view_iterator.hpp000444000765000024 455712161110664 27531 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_JOINT_VIEW_ITERATOR_07162005_0140) #define FUSION_JOINT_VIEW_ITERATOR_07162005_0140 #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace fusion { struct joint_view_iterator_tag; struct forward_traversal_tag; template struct joint_view_iterator : iterator_base > { typedef convert_iterator first_converter; typedef convert_iterator last_converter; typedef convert_iterator concat_converter; typedef typename first_converter::type first_type; typedef typename last_converter::type last_type; typedef typename concat_converter::type concat_type; typedef joint_view_iterator_tag fusion_tag; typedef Category category; BOOST_STATIC_ASSERT((!result_of::equal_to::value)); joint_view_iterator(First const& in_first, Concat const& in_concat) : first(first_converter::call(in_first)) , concat(concat_converter::call(in_concat)) {} first_type first; concat_type concat; private: // silence MSVC warning C4512: assignment operator could not be generated joint_view_iterator& operator= (joint_view_iterator const&); }; }} #endif detail000755000765000024 012161110700 24013 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_viewbegin_impl.hpp000444000765000024 412112161110616 26772 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_BEGIN_IMPL_07162005_0115) #define FUSION_BEGIN_IMPL_07162005_0115 #include #include namespace boost { namespace fusion { struct joint_view_tag; template struct joint_view_iterator; namespace extension { template struct begin_impl; template <> struct begin_impl { template struct apply { typedef typename Sequence::first_type first_type; typedef typename Sequence::last_type last_type; typedef typename Sequence::concat_type concat_type; typedef typename Sequence::category category; typedef result_of::equal_to equal_to; typedef typename mpl::if_< equal_to , concat_type , joint_view_iterator >::type type; static type call(Sequence& s, mpl::true_) { return s.concat(); } static type call(Sequence& s, mpl::false_) { return type(s.first(), s.concat()); } static type call(Sequence& s) { return call(s, equal_to()); } }; }; } }} #endif deref_data_impl.hpp000444000765000024 212312161110646 27767 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/detail/*============================================================================= Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_DEREF_DATA_IMPL_HPP #define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_DEREF_DATA_IMPL_HPP #include namespace boost { namespace fusion { namespace extension { template struct deref_data_impl; template <> struct deref_data_impl { template struct apply { typedef typename result_of::deref_data::type type; static type call(It const& it) { return fusion::deref_data(it.first); } }; }; }}} #endif deref_impl.hpp000444000765000024 151012161110613 26767 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_DEREF_IMPL_07162005_0137) #define FUSION_DEREF_IMPL_07162005_0137 #include namespace boost { namespace fusion { struct joint_view_iterator_tag; namespace extension { template struct deref_impl; template <> struct deref_impl : detail::adapt_deref_traits {}; } }} #endif end_impl.hpp000444000765000024 213212161110603 26450 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_END_IMPL_07162005_0128) #define FUSION_END_IMPL_07162005_0128 #include #include namespace boost { namespace fusion { struct joint_view_tag; namespace extension { template struct end_impl; template <> struct end_impl { template struct apply { typedef typename Sequence::concat_last_type type; static type call(Sequence& s) { return s.concat_last(); } }; }; } }} #endif key_of_impl.hpp000444000765000024 154712161110676 27201 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/detail/*============================================================================= Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_KEY_OF_IMPL_HPP #define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_KEY_OF_IMPL_HPP #include namespace boost { namespace fusion { namespace extension { template struct key_of_impl; template <> struct key_of_impl { template struct apply : result_of::key_of {}; }; }}} #endif next_impl.hpp000444000765000024 436512161110700 26670 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_NEXT_IMPL_07162005_0136) #define FUSION_NEXT_IMPL_07162005_0136 #include #include #include namespace boost { namespace fusion { struct joint_view_iterator_tag; template struct joint_view_iterator; namespace extension { template struct next_impl; template <> struct next_impl { template struct apply { typedef typename Iterator::first_type first_type; typedef typename Iterator::last_type last_type; typedef typename Iterator::concat_type concat_type; typedef typename Iterator::category category; typedef typename result_of::next::type next_type; typedef result_of::equal_to equal_to; typedef typename mpl::if_< equal_to , concat_type , joint_view_iterator >::type type; static type call(Iterator const& i, mpl::true_) { return i.concat; } static type call(Iterator const& i, mpl::false_) { return type(fusion::next(i.first), i.concat); } static type call(Iterator const& i) { return call(i, equal_to()); } }; }; } }} #endif value_of_data_impl.hpp000444000765000024 162112161110667 30507 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/detail/*============================================================================= Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP #define BOOST_FUSION_VIEW_JOINT_VIEW_DETAIL_VALUE_OF_DATA_IMPL_HPP #include namespace boost { namespace fusion { namespace extension { template struct value_of_data_impl; template <> struct value_of_data_impl { template struct apply : result_of::value_of_data {}; }; }}} #endif value_of_impl.hpp000444000765000024 151612161110635 27514 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/joint_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_VALUE_IMPL_07162005_0132) #define FUSION_VALUE_IMPL_07162005_0132 #include namespace boost { namespace fusion { struct joint_view_iterator_tag; namespace extension { template struct value_of_impl; template <> struct value_of_impl : detail::adapt_value_traits {}; } }} #endif single_view000755000765000024 012161110637 22720 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/viewsingle_view.hpp000444000765000024 437212161110627 26106 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_05052005_0335) #define BOOST_FUSION_SINGLE_VIEW_05052005_0335 #include #include #include #include #include #include #include #include #include #include #include #include #if defined (BOOST_MSVC) # pragma warning(push) # pragma warning (disable: 4512) // assignment operator could not be generated. #endif namespace boost { namespace fusion { struct single_view_tag; struct random_access_traversal_tag; struct fusion_sequence_tag; template struct single_view : sequence_base > { typedef single_view_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef random_access_traversal_tag category; typedef mpl::true_ is_view; typedef mpl::int_<1> size; typedef T value_type; single_view() : val() {} explicit single_view(typename detail::call_param::type in_val) : val(in_val) {} value_type val; }; template inline single_view::type> make_single_view(T const& v) { return single_view::type>(v); } }} #if defined (BOOST_MSVC) # pragma warning(pop) #endif #endif single_view_iterator.hpp000444000765000024 404412161110637 30014 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_ITERATOR_05052005_0340) #define BOOST_FUSION_SINGLE_VIEW_ITERATOR_05052005_0340 #include #include #include #include #include #include #include #include #include #include #if defined (BOOST_MSVC) # pragma warning(push) # pragma warning (disable: 4512) // assignment operator could not be generated. #endif namespace boost { namespace fusion { struct single_view_iterator_tag; struct random_access_traversal_tag; template struct single_view_iterator : iterator_base > { typedef single_view_iterator_tag fusion_tag; typedef random_access_traversal_tag category; typedef typename SingleView::value_type value_type; typedef Pos position; typedef SingleView single_view_type; explicit single_view_iterator(single_view_type& in_view) : view(in_view) {} SingleView& view; private: single_view_iterator& operator=(single_view_iterator const&); }; }} #if defined (BOOST_MSVC) # pragma warning(pop) #endif #endif detail000755000765000024 012161110657 24164 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_viewadvance_impl.hpp000444000765000024 256112161110657 27460 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_ADVANCE_IMPL_JUL_07_2011_1348PM) #define BOOST_FUSION_SINGLE_VIEW_ADVANCE_IMPL_JUL_07_2011_1348PM #include namespace boost { namespace fusion { struct single_view_iterator_tag; template struct single_view_iterator; namespace extension { template struct advance_impl; template<> struct advance_impl { template struct apply { typedef single_view_iterator< typename Iterator::single_view_type, typename mpl::plus::type> type; static type call(Iterator const& i) { return type(i.view); } }; }; } }} #endif at_impl.hpp000444000765000024 233612161110603 26452 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_AT_IMPL_JUL_07_2011_1348PM) #define BOOST_FUSION_SINGLE_VIEW_AT_IMPL_JUL_07_2011_1348PM #include #include #include namespace boost { namespace fusion { struct single_view_tag; namespace extension { template struct at_impl; template<> struct at_impl { template struct apply { BOOST_MPL_ASSERT((mpl::equal_to >)); typedef typename Sequence::value_type type; static type call(Sequence& seq) { return seq.val; } }; }; } }} #endif begin_impl.hpp000444000765000024 234312161110615 27133 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_BEGIN_IMPL_05052005_0305) #define BOOST_FUSION_SINGLE_VIEW_BEGIN_IMPL_05052005_0305 #include namespace boost { namespace fusion { struct single_view_tag; template struct single_view_iterator; namespace extension { template struct begin_impl; template <> struct begin_impl { template struct apply { typedef single_view_iterator > type; static type call(Sequence& seq) { return type(seq); } }; }; } }} #endif deref_impl.hpp000444000765000024 247012161110621 27132 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_DEREF_IMPL_05052005_0258) #define BOOST_FUSION_SINGLE_VIEW_DEREF_IMPL_05052005_0258 #include #include #include namespace boost { namespace fusion { struct single_view_iterator_tag; namespace extension { template struct deref_impl; template <> struct deref_impl { template struct apply { BOOST_MPL_ASSERT((mpl::equal_to >)); typedef typename Iterator::value_type type; static type call(Iterator const& i) { return i.view.val; } }; }; } }} #endif distance_impl.hpp000444000765000024 245712161110601 27642 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_DISTANCE_IMPL_JUL_07_2011_1348PM) #define BOOST_FUSION_SINGLE_VIEW_DISTANCE_IMPL_JUL_07_2011_1348PM #include namespace boost { namespace fusion { struct single_view_iterator_tag; namespace extension { template struct distance_impl; template<> struct distance_impl { template struct apply : mpl::minus { typedef typename mpl::minus::type type; static type call(First const& /*first*/, Last const& /*last*/) { return type(); } }; }; } }} #endif end_impl.hpp000444000765000024 233312161110643 26615 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_END_IMPL_05052005_0332) #define BOOST_FUSION_SINGLE_VIEW_END_IMPL_05052005_0332 #include namespace boost { namespace fusion { struct single_view_tag; template struct single_view_iterator; namespace extension { template struct end_impl; template <> struct end_impl { template struct apply { typedef single_view_iterator > type; static type call(Sequence& seq) { return type(seq); } }; }; } }} #endif equal_to_impl.hpp000444000765000024 244412161110643 27663 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_ITERATOR_JUL_07_2011_1348PM) #define BOOST_FUSION_SINGLE_VIEW_ITERATOR_JUL_07_2011_1348PM #include #include #include #include namespace boost { namespace fusion { struct single_view_iterator_tag; namespace extension { template struct equal_to_impl; template<> struct equal_to_impl { template struct apply : mpl::equal_to { BOOST_MPL_ASSERT((is_same::type, typename add_const::type>)); }; }; } }} #endif next_impl.hpp000444000765000024 273612161110617 27035 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_NEXT_IMPL_05052005_0331) #define BOOST_FUSION_SINGLE_VIEW_NEXT_IMPL_05052005_0331 #include #include namespace boost { namespace fusion { struct single_view_iterator_tag; template struct single_view_iterator; namespace extension { template struct next_impl; template <> struct next_impl { template struct apply { typedef single_view_iterator< typename Iterator::single_view_type, typename mpl::next::type> type; static type call(Iterator const& i) { BOOST_STATIC_ASSERT((type::position::value < 2)); return type(i.view); } }; }; } }} #endif prior_impl.hpp000444000765000024 252412161110620 27177 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_PRIOR_IMPL_JUL_07_2011_1348PM) #define BOOST_FUSION_SINGLE_VIEW_PRIOR_IMPL_JUL_07_2011_1348PM #include namespace boost { namespace fusion { struct single_view_iterator_tag; template struct single_view_iterator; namespace extension { template struct prior_impl; template <> struct prior_impl { template struct apply { typedef single_view_iterator< typename Iterator::single_view_type, typename mpl::prior::type> type; static type call(Iterator const& i) { return type(i.view); } }; }; } }} #endif size_impl.hpp000444000765000024 160512161110644 27023 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SINGLE_VIEW_SIZE_IMPL_JUL_07_2011_1348PM) #define FUSION_SINGLE_VIEW_SIZE_IMPL_JUL_07_2011_1348PM namespace boost { namespace fusion { struct single_view_tag; namespace extension { template struct size_impl; template <> struct size_impl { template struct apply { typedef mpl::int_<1> type; }; }; } }} #endif value_at_impl.hpp000444000765000024 223712161110652 27652 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_VALUE_AT_IMPL_JUL_07_2011_1348PM) #define BOOST_FUSION_SINGLE_VIEW_VALUE_AT_IMPL_JUL_07_2011_1348PM #include #include #include #include namespace boost { namespace fusion { struct single_view_tag; namespace extension { template struct value_at_impl; template<> struct value_at_impl { template struct apply { BOOST_MPL_ASSERT((mpl::equal_to >)); typedef typename Sequence::value_type type; }; }; } }} #endif value_of_impl.hpp000444000765000024 225212161110604 27644 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/fusion/view/single_view/detail/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2011 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_FUSION_SINGLE_VIEW_VALUE_OF_IMPL_05052005_0324) #define BOOST_FUSION_SINGLE_VIEW_VALUE_OF_IMPL_05052005_0324 #include #include #include namespace boost { namespace fusion { struct single_view_iterator_tag; namespace extension { template struct value_of_impl; template <> struct value_of_impl { template struct apply { BOOST_MPL_ASSERT((mpl::equal_to >)); typedef typename Iterator::value_type type; }; }; } }} #endif geometry000755000765000024 012161110612 17754 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostgeometry.hpp000444000765000024 732612161110610 22463 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRY_HPP #define BOOST_GEOMETRY_GEOMETRY_HPP // Shortcut to include all header files #include #include #include #include // Core algorithms #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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Include multi a.o. because it can give weird effects // if you don't (e.g. area=0 of a multipolygon) #include // check includes all concepts #include #include #include #include #include #include #include #include #include #endif // BOOST_GEOMETRY_GEOMETRY_HPP algorithms000755000765000024 012161110700 22123 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometryappend.hpp000444000765000024 1504512161110616 24273 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_APPEND_HPP #define BOOST_GEOMETRY_ALGORITHMS_APPEND_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace append { template struct append_no_action { static inline void apply(Geometry& , Point const& , int = 0, int = 0) { } }; template struct append_point { static inline void apply(Geometry& geometry, Point const& point, int = 0, int = 0) { typename geometry::point_type::type copy; geometry::detail::conversion::convert_point_to_point(point, copy); traits::push_back::apply(geometry, copy); } }; template struct append_range { typedef typename boost::range_value::type point_type; static inline void apply(Geometry& geometry, Range const& range, int = 0, int = 0) { for (typename boost::range_iterator::type it = boost::begin(range); it != boost::end(range); ++it) { append_point::apply(geometry, *it); } } }; template struct point_to_polygon { typedef typename ring_type::type ring_type; static inline void apply(Polygon& polygon, Point const& point, int ring_index, int = 0) { if (ring_index == -1) { append_point::apply( exterior_ring(polygon), point); } else if (ring_index < int(num_interior_rings(polygon))) { append_point::apply( interior_rings(polygon)[ring_index], point); } } }; template struct range_to_polygon { typedef typename ring_type::type ring_type; static inline void apply(Polygon& polygon, Range const& range, int ring_index, int ) { if (ring_index == -1) { append_range::apply( exterior_ring(polygon), range); } else if (ring_index < int(num_interior_rings(polygon))) { append_range::apply( interior_rings(polygon)[ring_index], range); } } }; }} // namespace detail::append #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { namespace splitted_dispatch { template struct append_point : detail::append::append_no_action {}; template struct append_point : detail::append::append_point {}; template struct append_point : detail::append::append_point {}; template struct append_point : detail::append::point_to_polygon {}; template struct append_range : detail::append::append_no_action {}; template struct append_range : detail::append::append_range {}; template struct append_range : detail::append::append_range {}; template struct append_range : detail::append::range_to_polygon {}; } // Default: append a range (or linestring or ring or whatever) to any geometry template < typename Geometry, typename RangeOrPoint, typename TagRangeOrPoint = typename tag::type > struct append : splitted_dispatch::append_range::type, Geometry, RangeOrPoint> {}; // Specialization for point to append a point to any geometry template struct append : splitted_dispatch::append_point::type, Geometry, RangeOrPoint> {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Appends one or more points to a linestring, ring, polygon, multi-geometry \ingroup append \tparam Geometry \tparam_geometry \tparam RangeOrPoint Either a range or a point, fullfilling Boost.Range concept or Boost.Geometry Point Concept \param geometry \param_geometry \param range_or_point The point or range to add \param ring_index The index of the ring in case of a polygon: exterior ring (-1, the default) or interior ring index \param multi_index Reserved for multi polygons or multi linestrings \qbk{[include reference/algorithms/append.qbk]} } */ template inline void append(Geometry& geometry, RangeOrPoint const& range_or_point, int ring_index = -1, int multi_index = 0) { concept::check(); dispatch::append < Geometry, RangeOrPoint >::apply(geometry, range_or_point, ring_index, multi_index); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_APPEND_HPP area.hpp000444000765000024 2075312161110650 23734 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_AREA_HPP #define BOOST_GEOMETRY_ALGORITHMS_AREA_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace area { struct box_area { template static inline typename coordinate_type::type apply(Box const& box, Strategy const&) { // Currently only works for 2D Cartesian boxes assert_dimension(); return (get(box) - get(box)) * (get(box) - get(box)); } }; template < iterate_direction Direction, closure_selector Closure > struct ring_area { template static inline typename Strategy::return_type apply(Ring const& ring, Strategy const& strategy) { BOOST_CONCEPT_ASSERT( (geometry::concept::AreaStrategy) ); assert_dimension(); // Ignore warning (because using static method sometimes) on strategy boost::ignore_unused_variable_warning(strategy); // An open ring has at least three points, // A closed ring has at least four points, // if not, there is no (zero) area if (int(boost::size(ring)) < core_detail::closure::minimum_ring_size::value) { return typename Strategy::return_type(); } typedef typename reversible_view::type rview_type; typedef typename closeable_view < rview_type const, Closure >::type view_type; typedef typename boost::range_iterator::type iterator_type; rview_type rview(ring); view_type view(rview); typename Strategy::state_type state; iterator_type it = boost::begin(view); iterator_type end = boost::end(view); for (iterator_type previous = it++; it != end; ++previous, ++it) { strategy.apply(*previous, *it, state); } return strategy.result(state); } }; }} // namespace detail::area #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag::type > struct area : detail::calculate_null { template static inline typename Strategy::return_type apply(Geometry const& geometry, Strategy const& strategy) { return calculate_null::apply(geometry, strategy); } }; template struct area, void> { template struct visitor: boost::static_visitor { Strategy const& m_strategy; visitor(Strategy const& strategy): m_strategy(strategy) {} template typename Strategy::return_type operator()(Geometry const& geometry) const { return dispatch::area::apply(geometry, m_strategy); } }; template static inline typename Strategy::return_type apply(Variant const& variant_geometry, Strategy const& strategy) { return boost::apply_visitor(visitor(strategy), variant_geometry); } }; template struct area : detail::area::box_area {}; template struct area : detail::area::ring_area < order_as_direction::value>::value, geometry::closure::value > {}; template struct area : detail::calculate_polygon_sum { template static inline typename Strategy::return_type apply(Polygon const& polygon, Strategy const& strategy) { return calculate_polygon_sum::apply< typename Strategy::return_type, detail::area::ring_area < order_as_direction::value>::value, geometry::closure::value > >(polygon, strategy); } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_calc{area} \ingroup area \details \details_calc{area}. \details_default_strategy The area algorithm calculates the surface area of all geometries having a surface, namely box, polygon, ring, multipolygon. The units are the square of the units used for the points defining the surface. If subject geometry is defined in meters, then area is calculated in square meters. The area calculation can be done in all three common coordinate systems, Cartesian, Spherical and Geographic as well. \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_calc{area} \qbk{[include reference/algorithms/area.qbk]} \qbk{[heading Examples]} \qbk{[area] [area_output]} */ template inline typename default_area_result::type area(Geometry const& geometry) { concept::check(); typedef typename point_type::type point_type; typedef typename strategy::area::services::default_strategy < typename cs_tag::type, point_type >::type strategy_type; // detail::throw_on_empty_input(geometry); return dispatch::area::apply(geometry, strategy_type()); } /*! \brief \brief_calc{area} \brief_strategy \ingroup area \details \details_calc{area} \brief_strategy. \details_strategy_reasons \tparam Geometry \tparam_geometry \tparam Strategy \tparam_strategy{Area} \param geometry \param_geometry \param strategy \param_strategy{area} \return \return_calc{area} \qbk{distinguish,with strategy} \qbk{ [include reference/algorithms/area.qbk] [heading Example] [area_with_strategy] [area_with_strategy_output] [heading Available Strategies] \* [link geometry.reference.strategies.strategy_area_surveyor Surveyor (cartesian)] \* [link geometry.reference.strategies.strategy_area_huiller Huiller (spherical)] } */ template inline typename Strategy::return_type area( Geometry const& geometry, Strategy const& strategy) { concept::check(); // detail::throw_on_empty_input(geometry); return dispatch::area::apply(geometry, strategy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_AREA_HPP assign.hpp000444000765000024 1214412161110660 24304 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_ASSIGN_HPP #define BOOST_GEOMETRY_ALGORITHMS_ASSIGN_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Assign a range of points to a linestring, ring or polygon \note The point-type of the range might be different from the point-type of the geometry \ingroup assign \tparam Geometry \tparam_geometry \tparam Range \tparam_range_point \param geometry \param_geometry \param range \param_range_point \qbk{ [heading Notes] [note Assign automatically clears the geometry before assigning (use append if you don't want that)] [heading Example] [assign_points] [assign_points_output] [heading See also] \* [link geometry.reference.algorithms.append append] } */ template inline void assign_points(Geometry& geometry, Range const& range) { concept::check(); clear(geometry); geometry::append(geometry, range, -1, 0); } /*! \brief assign to a box inverse infinite \details The assign_inverse function initialize a 2D or 3D box with large coordinates, the min corner is very large, the max corner is very small. This is a convenient starting point to collect the minimum bounding box of a geometry. \ingroup assign \tparam Geometry \tparam_geometry \param geometry \param_geometry \qbk{ [heading Example] [assign_inverse] [assign_inverse_output] [heading See also] \* [link geometry.reference.algorithms.make.make_inverse make_inverse] } */ template inline void assign_inverse(Geometry& geometry) { concept::check(); dispatch::assign_inverse < typename tag::type, Geometry >::apply(geometry); } /*! \brief assign zero values to a box, point \ingroup assign \details The assign_zero function initializes a 2D or 3D point or box with coordinates of zero \tparam Geometry \tparam_geometry \param geometry \param_geometry */ template inline void assign_zero(Geometry& geometry) { concept::check(); dispatch::assign_zero < typename tag::type, Geometry >::apply(geometry); } /*! \brief Assigns one geometry to another geometry \details The assign algorithm assigns one geometry, e.g. a BOX, to another geometry, e.g. a RING. This only if it is possible and applicable. \ingroup assign \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry (target) \param geometry2 \param_geometry (source) \qbk{ [heading Example] [assign] [assign_output] [heading See also] \* [link geometry.reference.algorithms.convert convert] } */ template inline void assign(Geometry1& geometry1, Geometry2 const& geometry2) { concept::check_concepts_and_equal_dimensions(); bool const same_point_order = point_order::value == point_order::value; bool const same_closure = closure::value == closure::value; BOOST_MPL_ASSERT_MSG ( same_point_order, ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_POINT_ORDER , (types) ); BOOST_MPL_ASSERT_MSG ( same_closure, ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_CLOSURE , (types) ); dispatch::convert::apply(geometry2, geometry1); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_ASSIGN_HPP buffer.hpp000444000765000024 1243712161110657 24304 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_BUFFER_HPP #define BOOST_GEOMETRY_ALGORITHMS_BUFFER_HPP #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace buffer { template struct box_loop { typedef typename coordinate_type::type coordinate_type; static inline void apply(BoxIn const& box_in, T const& distance, BoxOut& box_out) { coordinate_type d = distance; set(box_out, get(box_in) + d); box_loop::apply(box_in, distance, box_out); } }; template struct box_loop { static inline void apply(BoxIn const&, T const&, BoxOut&) {} }; // Extends a box with the same amount in all directions template inline void buffer_box(BoxIn const& box_in, T const& distance, BoxOut& box_out) { assert_dimension_equal(); static const std::size_t N = dimension::value; box_loop::apply(box_in, -distance, box_out); box_loop::apply(box_in, distance, box_out); } }} // namespace detail::buffer #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Input, typename Output, typename TagIn = typename tag::type, typename TagOut = typename tag::type > struct buffer: not_implemented {}; template struct buffer { template static inline void apply(BoxIn const& box_in, Distance const& distance, Distance const& , BoxIn& box_out) { detail::buffer::buffer_box(box_in, distance, box_out); } }; // Many things to do. Point is easy, other geometries require self intersections // For point, note that it should output as a polygon (like the rest). Buffers // of a set of geometries are often lateron combined using a "dissolve" operation. // Two points close to each other get a combined kidney shaped buffer then. } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_calc{buffer} \ingroup buffer \details \details_calc{buffer, \det_buffer}. \tparam Input \tparam_geometry \tparam Output \tparam_geometry \tparam Distance \tparam_numeric \param geometry_in \param_geometry \param geometry_out \param_geometry \param distance The distance to be used for the buffer \param chord_length (optional) The length of the chord's in the generated arcs around points or bends \note Currently only implemented for box, the trivial case, but still useful \qbk{[include reference/algorithms/buffer.qbk]} */ template inline void buffer(Input const& geometry_in, Output& geometry_out, Distance const& distance, Distance const& chord_length = -1) { concept::check(); concept::check(); dispatch::buffer < Input, Output >::apply(geometry_in, distance, chord_length, geometry_out); } /*! \brief \brief_calc{buffer} \ingroup buffer \details \details_calc{return_buffer, \det_buffer}. \details_return{buffer}. \tparam Input \tparam_geometry \tparam Output \tparam_geometry \tparam Distance \tparam_numeric \param geometry \param_geometry \param distance The distance to be used for the buffer \param chord_length (optional) The length of the chord's in the generated arcs around points or bends \return \return_calc{buffer} */ template Output return_buffer(Input const& geometry, T const& distance, T const& chord_length = -1) { concept::check(); concept::check(); Output geometry_out; dispatch::buffer < Input, Output >::apply(geometry, distance, chord_length, geometry_out); return geometry_out; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_BUFFER_HPP centroid.hpp000444000765000024 2772212161110600 24631 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_CENTROID_HPP #define BOOST_GEOMETRY_ALGORITHMS_CENTROID_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW) /*! \brief Centroid Exception \ingroup centroid \details The centroid_exception is thrown if the free centroid function is called with geometries for which the centroid cannot be calculated. For example: a linestring without points, a polygon without points, an empty multi-geometry. \qbk{ [heading See also] \* [link geometry.reference.algorithms.centroid the centroid function] } */ class centroid_exception : public geometry::exception { public: inline centroid_exception() {} virtual char const* what() const throw() { return "Boost.Geometry Centroid calculation exception"; } }; #endif #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace centroid { struct centroid_point { template static inline void apply(Point const& point, PointCentroid& centroid, Strategy const&) { geometry::convert(point, centroid); } }; template < typename Box, typename Point, std::size_t Dimension, std::size_t DimensionCount > struct centroid_box_calculator { typedef typename select_coordinate_type < Box, Point >::type coordinate_type; static inline void apply(Box const& box, Point& centroid) { coordinate_type const c1 = get(box); coordinate_type const c2 = get(box); coordinate_type m = c1 + c2; m /= 2.0; set(centroid, m); centroid_box_calculator < Box, Point, Dimension + 1, DimensionCount >::apply(box, centroid); } }; template struct centroid_box_calculator { static inline void apply(Box const& , Point& ) { } }; struct centroid_box { template static inline void apply(Box const& box, Point& centroid, Strategy const&) { centroid_box_calculator < Box, Point, 0, dimension::type::value >::apply(box, centroid); } }; // There is one thing where centroid is different from e.g. within. // If the ring has only one point, it might make sense that // that point is the centroid. template inline bool range_ok(Range const& range, Point& centroid) { std::size_t const n = boost::size(range); if (n > 1) { return true; } else if (n <= 0) { #if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW) throw centroid_exception(); #endif return false; } else // if (n == 1) { // Take over the first point in a "coordinate neutral way" geometry::convert(*boost::begin(range), centroid); return false; } return true; } /*! \brief Calculate the centroid of a ring. */ template struct centroid_range_state { template static inline void apply(Ring const& ring, Strategy const& strategy, typename Strategy::state_type& state) { typedef typename closeable_view::type view_type; typedef typename boost::range_iterator::type iterator_type; view_type view(ring); iterator_type it = boost::begin(view); iterator_type end = boost::end(view); for (iterator_type previous = it++; it != end; ++previous, ++it) { strategy.apply(*previous, *it, state); } } }; template struct centroid_range { template static inline void apply(Range const& range, Point& centroid, Strategy const& strategy) { if (range_ok(range, centroid)) { typename Strategy::state_type state; centroid_range_state::apply(range, strategy, state); strategy.result(state, centroid); } } }; /*! \brief Centroid of a polygon. \note Because outer ring is clockwise, inners are counter clockwise, triangle approach is OK and works for polygons with rings. */ struct centroid_polygon_state { template static inline void apply(Polygon const& poly, Strategy const& strategy, typename Strategy::state_type& state) { typedef typename ring_type::type ring_type; typedef centroid_range_state::value> per_ring; per_ring::apply(exterior_ring(poly), strategy, state); typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { per_ring::apply(*it, strategy, state); } } }; struct centroid_polygon { template static inline void apply(Polygon const& poly, Point& centroid, Strategy const& strategy) { if (range_ok(exterior_ring(poly), centroid)) { typename Strategy::state_type state; centroid_polygon_state::apply(poly, strategy, state); strategy.result(state, centroid); } } }; }} // namespace detail::centroid #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag::type > struct centroid: not_implemented {}; template struct centroid : detail::centroid::centroid_point {}; template struct centroid : detail::centroid::centroid_box {}; template struct centroid : detail::centroid::centroid_range::value> {}; template struct centroid : detail::centroid::centroid_range {}; template struct centroid : detail::centroid::centroid_polygon {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_calc{centroid} \brief_strategy \ingroup centroid \details \details_calc{centroid,geometric center (or: center of mass)}. \details_strategy_reasons \tparam Geometry \tparam_geometry \tparam Point \tparam_point \tparam Strategy \tparam_strategy{Centroid} \param geometry \param_geometry \param c \param_point \param_set{centroid} \param strategy \param_strategy{centroid} \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/centroid.qbk]} \qbk{[include reference/algorithms/centroid_strategies.qbk]} } */ template inline void centroid(Geometry const& geometry, Point& c, Strategy const& strategy) { //BOOST_CONCEPT_ASSERT( (geometry::concept::CentroidStrategy) ); concept::check_concepts_and_equal_dimensions(); typedef typename point_type::type point_type; // Call dispatch apply method. That one returns true if centroid // should be taken from state. dispatch::centroid::apply(geometry, c, strategy); } /*! \brief \brief_calc{centroid} \ingroup centroid \details \details_calc{centroid,geometric center (or: center of mass)}. \details_default_strategy \tparam Geometry \tparam_geometry \tparam Point \tparam_point \param geometry \param_geometry \param c The calculated centroid will be assigned to this point reference \qbk{[include reference/algorithms/centroid.qbk]} \qbk{ [heading Example] [centroid] [centroid_output] } */ template inline void centroid(Geometry const& geometry, Point& c) { concept::check_concepts_and_equal_dimensions(); typedef typename strategy::centroid::services::default_strategy < typename cs_tag::type, typename tag_cast < typename tag::type, pointlike_tag, linear_tag, areal_tag >::type, dimension::type::value, Point, Geometry >::type strategy_type; centroid(geometry, c, strategy_type()); } /*! \brief \brief_calc{centroid} \ingroup centroid \details \details_calc{centroid,geometric center (or: center of mass)}. \details_return{centroid}. \tparam Point \tparam_point \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_calc{centroid} \qbk{[include reference/algorithms/centroid.qbk]} */ template inline Point return_centroid(Geometry const& geometry) { concept::check_concepts_and_equal_dimensions(); Point c; centroid(geometry, c); return c; } /*! \brief \brief_calc{centroid} \brief_strategy \ingroup centroid \details \details_calc{centroid,geometric center (or: center of mass)}. \details_return{centroid}. \details_strategy_reasons \tparam Point \tparam_point \tparam Geometry \tparam_geometry \tparam Strategy \tparam_strategy{centroid} \param geometry \param_geometry \param strategy \param_strategy{centroid} \return \return_calc{centroid} \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/centroid.qbk]} \qbk{[include reference/algorithms/centroid_strategies.qbk]} */ template inline Point return_centroid(Geometry const& geometry, Strategy const& strategy) { //BOOST_CONCEPT_ASSERT( (geometry::concept::CentroidStrategy) ); concept::check_concepts_and_equal_dimensions(); Point c; centroid(geometry, c, strategy); return c; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_CENTROID_HPP clear.hpp000444000765000024 1052212161110630 24101 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP #define BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace clear { template struct collection_clear { static inline void apply(Geometry& geometry) { traits::clear::apply(geometry); } }; template struct polygon_clear { static inline void apply(Polygon& polygon) { traits::clear < typename boost::remove_reference < typename traits::interior_mutable_type::type >::type >::apply(interior_rings(polygon)); traits::clear < typename boost::remove_reference < typename traits::ring_mutable_type::type >::type >::apply(exterior_ring(polygon)); } }; template struct no_action { static inline void apply(Geometry& ) { } }; }} // namespace detail::clear #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag_cast::type, multi_tag>::type > struct clear { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; // Point/box/segment do not have clear. So specialize to do nothing. template struct clear : detail::clear::no_action {}; template struct clear : detail::clear::no_action {}; template struct clear : detail::clear::no_action {}; template struct clear : detail::clear::collection_clear {}; template struct clear : detail::clear::collection_clear {}; // Polygon can (indirectly) use std for clear template struct clear : detail::clear::polygon_clear {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Clears a linestring, ring or polygon (exterior+interiors) or multi* \details Generic function to clear a geometry. All points will be removed from the collection or collections making up the geometry. In most cases this is equivalent to the .clear() method of a std::vector<...>. In the case of a polygon, this clear functionality is automatically called for the exterior ring, and for the interior ring collection. In the case of a point, boxes and segments, nothing will happen. \ingroup clear \tparam Geometry \tparam_geometry \param geometry \param_geometry which will be cleared \note points and boxes cannot be cleared, instead they can be set to zero by "assign_zero" \qbk{[include reference/algorithms/clear.qbk]} */ template inline void clear(Geometry& geometry) { concept::check(); dispatch::clear::apply(geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP comparable_distance.hpp000444000765000024 546012161110650 26761 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP #define BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP #include namespace boost { namespace geometry { /*! \brief \brief_calc2{comparable distance measurement} \ingroup distance \details The free function comparable_distance does not necessarily calculate the distance, but it calculates a distance measure such that two distances are comparable to each other. For example: for the Cartesian coordinate system, Pythagoras is used but the square root is not taken, which makes it faster and the results of two point pairs can still be compared to each other. \tparam Geometry1 first geometry type \tparam Geometry2 second geometry type \param geometry1 \param_geometry \param geometry2 \param_geometry \return \return_calc{comparable distance} \qbk{[include reference/algorithms/comparable_distance.qbk]} */ template inline typename default_distance_result::type comparable_distance( Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check(); concept::check(); typedef typename point_type::type point1_type; typedef typename point_type::type point2_type; // Define a point-point-distance-strategy // for either the normal case, either the reversed case typedef typename strategy::distance::services::comparable_type < typename boost::mpl::if_c < geometry::reverse_dispatch ::type::value, typename strategy::distance::services::default_strategy ::type, typename strategy::distance::services::default_strategy ::type >::type >::type strategy_type; return distance(geometry1, geometry2, strategy_type()); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP convert.hpp000444000765000024 3013512161110647 24505 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP #define BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace conversion { template < typename Point, typename Box, std::size_t Index, std::size_t Dimension, std::size_t DimensionCount > struct point_to_box { static inline void apply(Point const& point, Box& box) { typedef typename coordinate_type::type coordinate_type; set(box, boost::numeric_cast(get(point))); point_to_box < Point, Box, Index, Dimension + 1, DimensionCount >::apply(point, box); } }; template < typename Point, typename Box, std::size_t Index, std::size_t DimensionCount > struct point_to_box { static inline void apply(Point const& , Box& ) {} }; template struct box_to_range { static inline void apply(Box const& box, Range& range) { traits::resize::apply(range, Close ? 5 : 4); assign_box_corners_oriented(box, range); if (Close) { range[4] = range[0]; } } }; template struct segment_to_range { static inline void apply(Segment const& segment, Range& range) { traits::resize::apply(range, 2); typename boost::range_iterator::type it = boost::begin(range); assign_point_from_index<0>(segment, *it); ++it; assign_point_from_index<1>(segment, *it); } }; template < typename Range1, typename Range2, bool Reverse = false > struct range_to_range { typedef typename reversible_view < Range1 const, Reverse ? iterate_reverse : iterate_forward >::type rview_type; typedef typename closeable_view < rview_type const, geometry::closure::value >::type view_type; static inline void apply(Range1 const& source, Range2& destination) { geometry::clear(destination); rview_type rview(source); // We consider input always as closed, and skip last // point for open output. view_type view(rview); int n = boost::size(view); if (geometry::closure::value == geometry::open) { n--; } int i = 0; for (typename boost::range_iterator::type it = boost::begin(view); it != boost::end(view) && i < n; ++it, ++i) { geometry::append(destination, *it); } } }; template struct polygon_to_polygon { typedef range_to_range < typename geometry::ring_type::type, typename geometry::ring_type::type, geometry::point_order::value != geometry::point_order::value > per_ring; static inline void apply(Polygon1 const& source, Polygon2& destination) { // Clearing managed per ring, and in the resizing of interior rings per_ring::apply(geometry::exterior_ring(source), geometry::exterior_ring(destination)); // Container should be resizeable traits::resize < typename boost::remove_reference < typename traits::interior_mutable_type::type >::type >::apply(interior_rings(destination), num_interior_rings(source)); typename interior_return_type::type rings_source = interior_rings(source); typename interior_return_type::type rings_dest = interior_rings(destination); BOOST_AUTO_TPL(it_source, boost::begin(rings_source)); BOOST_AUTO_TPL(it_dest, boost::begin(rings_dest)); for ( ; it_source != boost::end(rings_source); ++it_source, ++it_dest) { per_ring::apply(*it_source, *it_dest); } } }; }} // namespace detail::conversion #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry1, typename Geometry2, typename Tag1 = typename tag_cast::type, multi_tag>::type, typename Tag2 = typename tag_cast::type, multi_tag>::type, std::size_t DimensionCount = dimension::type::value, bool UseAssignment = boost::is_same::value && !boost::is_array::value > struct convert: not_implemented > {}; template < typename Geometry1, typename Geometry2, typename Tag, std::size_t DimensionCount > struct convert { // Same geometry type -> copy whole geometry static inline void apply(Geometry1 const& source, Geometry2& destination) { destination = source; } }; template < typename Geometry1, typename Geometry2, std::size_t DimensionCount > struct convert : detail::conversion::point_to_point {}; template < typename Box1, typename Box2, std::size_t DimensionCount > struct convert : detail::conversion::indexed_to_indexed {}; template < typename Segment1, typename Segment2, std::size_t DimensionCount > struct convert : detail::conversion::indexed_to_indexed {}; template struct convert : detail::conversion::segment_to_range {}; template struct convert : detail::conversion::range_to_range < Ring1, Ring2, geometry::point_order::value != geometry::point_order::value > {}; template struct convert : detail::conversion::range_to_range {}; template struct convert : detail::conversion::polygon_to_polygon {}; template struct convert : detail::conversion::box_to_range < Box, Ring, geometry::closure::value == closed, geometry::point_order::value == counterclockwise > {}; template struct convert { static inline void apply(Box const& box, Polygon& polygon) { typedef typename ring_type::type ring_type; convert < Box, ring_type, box_tag, ring_tag, 2, false >::apply(box, exterior_ring(polygon)); } }; template struct convert { static inline void apply(Point const& point, Box& box) { detail::conversion::point_to_box < Point, Box, min_corner, 0, DimensionCount >::apply(point, box); detail::conversion::point_to_box < Point, Box, max_corner, 0, DimensionCount >::apply(point, box); } }; template struct convert { static inline void apply(Ring const& ring, Polygon& polygon) { typedef typename ring_type::type ring_type; convert < Ring, ring_type, ring_tag, ring_tag, DimensionCount, false >::apply(ring, exterior_ring(polygon)); } }; template struct convert { static inline void apply(Polygon const& polygon, Ring& ring) { typedef typename ring_type::type ring_type; convert < ring_type, Ring, ring_tag, ring_tag, DimensionCount, false >::apply(exterior_ring(polygon), ring); } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Converts one geometry to another geometry \details The convert algorithm converts one geometry, e.g. a BOX, to another geometry, e.g. a RING. This only if it is possible and applicable. If the point-order is different, or the closure is different between two geometry types, it will be converted correctly by explicitly reversing the points or closing or opening the polygon rings. \ingroup convert \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry (source) \param geometry2 \param_geometry (target) \qbk{[include reference/algorithms/convert.qbk]} */ template inline void convert(Geometry1 const& geometry1, Geometry2& geometry2) { concept::check_concepts_and_equal_dimensions(); dispatch::convert::apply(geometry1, geometry2); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP convex_hull.hpp000444000765000024 1635012161110603 25346 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP #define BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace convex_hull { template struct hull_insert { // Member template function (to avoid inconvenient declaration // of output-iterator-type, from hull_to_geometry) template static inline OutputIterator apply(Geometry const& geometry, OutputIterator out, Strategy const& strategy) { typename Strategy::state_type state; strategy.apply(geometry, state); strategy.result(state, out, Order == clockwise); return out; } }; struct hull_to_geometry { template static inline void apply(Geometry const& geometry, OutputGeometry& out, Strategy const& strategy) { hull_insert < geometry::point_order::value >::apply(geometry, std::back_inserter( // Handle linestring, ring and polygon the same: detail::as_range < typename range_type::type >(out)), strategy); } }; // Helper metafunction for default strategy retrieval template struct default_strategy : strategy_convex_hull < Geometry, typename point_type::type > {}; }} // namespace detail::convex_hull #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag::type > struct convex_hull : detail::convex_hull::hull_to_geometry {}; template struct convex_hull { template static inline void apply(Box const& box, OutputGeometry& out, Strategy const& ) { static bool const Close = geometry::closure::value == closed; static bool const Reverse = geometry::point_order::value == counterclockwise; // A hull for boxes is trivial. Any strategy is (currently) skipped. boost::array::type, 4> range; geometry::detail::assign_box_corners_oriented(box, range); geometry::append(out, range); if (Close) { geometry::append(out, *boost::begin(range)); } } }; template struct convex_hull_insert : detail::convex_hull::hull_insert {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH template inline void convex_hull(Geometry const& geometry, OutputGeometry& out, Strategy const& strategy) { concept::check_concepts_and_equal_dimensions < const Geometry, OutputGeometry >(); BOOST_CONCEPT_ASSERT( (geometry::concept::ConvexHullStrategy) ); if (geometry::num_points(geometry) == 0) { // Leave output empty return; } dispatch::convex_hull::apply(geometry, out, strategy); } /*! \brief \brief_calc{convex hull} \ingroup convex_hull \details \details_calc{convex_hull,convex hull}. \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry \param_geometry, input geometry \param hull \param_geometry \param_set{convex hull} \qbk{[include reference/algorithms/convex_hull.qbk]} */ template inline void convex_hull(Geometry const& geometry, OutputGeometry& hull) { concept::check_concepts_and_equal_dimensions < const Geometry, OutputGeometry >(); typedef typename detail::convex_hull::default_strategy::type strategy_type; convex_hull(geometry, hull, strategy_type()); } #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace convex_hull { template inline OutputIterator convex_hull_insert(Geometry const& geometry, OutputIterator out, Strategy const& strategy) { // Concept: output point type = point type of input geometry concept::check(); concept::check::type>(); BOOST_CONCEPT_ASSERT( (geometry::concept::ConvexHullStrategy) ); return dispatch::convex_hull_insert < geometry::point_order::value >::apply(geometry, out, strategy); } /*! \brief Calculate the convex hull of a geometry, output-iterator version \ingroup convex_hull \tparam Geometry the input geometry type \tparam OutputIterator: an output-iterator \param geometry the geometry to calculate convex hull from \param out an output iterator outputing points of the convex hull \note This overloaded version outputs to an output iterator. In this case, nothing is known about its point-type or about its clockwise order. Therefore, the input point-type and order are copied */ template inline OutputIterator convex_hull_insert(Geometry const& geometry, OutputIterator out) { // Concept: output point type = point type of input geometry concept::check(); concept::check::type>(); typedef typename detail::convex_hull::default_strategy::type strategy_type; return convex_hull_insert(geometry, out, strategy_type()); } }} // namespace detail::convex_hull #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP correct.hpp000444000765000024 1641112161110644 24464 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_CORRECT_HPP #define BOOST_GEOMETRY_ALGORITHMS_CORRECT_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace correct { template struct correct_nop { static inline void apply(Geometry& ) {} }; template struct correct_box_loop { typedef typename coordinate_type::type coordinate_type; static inline void apply(Box& box) { if (get(box) > get(box)) { // Swap the coordinates coordinate_type max_value = get(box); coordinate_type min_value = get(box); set(box, min_value); set(box, max_value); } correct_box_loop < Box, Dimension + 1, DimensionCount >::apply(box); } }; template struct correct_box_loop { static inline void apply(Box& ) {} }; // Correct a box: make min/max correct template struct correct_box { static inline void apply(Box& box) { // Currently only for Cartesian coordinates // (or spherical without crossing dateline) // Future version: adapt using strategies correct_box_loop < Box, 0, dimension::type::value >::apply(box); } }; // Close a ring, if not closed template struct correct_ring { typedef typename point_type::type point_type; typedef typename coordinate_type::type coordinate_type; typedef typename strategy::area::services::default_strategy < typename cs_tag::type, point_type >::type strategy_type; typedef detail::area::ring_area < order_as_direction::value>::value, geometry::closure::value > ring_area_type; static inline void apply(Ring& r) { // Check close-ness if (boost::size(r) > 2) { // check if closed, if not, close it bool const disjoint = geometry::disjoint(*boost::begin(r), *(boost::end(r) - 1)); closure_selector const s = geometry::closure::value; if (disjoint && (s == closed)) { geometry::append(r, *boost::begin(r)); } if (! disjoint && geometry::closure::value != closed) { // Open it by removing last point geometry::traits::resize::apply(r, boost::size(r) - 1); } } // Check area Predicate predicate; typedef typename default_area_result::type area_result_type; area_result_type const zero = area_result_type(); if (predicate(ring_area_type::apply(r, strategy_type()), zero)) { std::reverse(boost::begin(r), boost::end(r)); } } }; // Correct a polygon: normalizes all rings, sets outer ring clockwise, sets all // inner rings counter clockwise (or vice versa depending on orientation) template struct correct_polygon { typedef typename ring_type::type ring_type; typedef typename default_area_result::type area_result_type; static inline void apply(Polygon& poly) { correct_ring < ring_type, std::less >::apply(exterior_ring(poly)); typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { correct_ring < ring_type, std::greater >::apply(*it); } } }; }} // namespace detail::correct #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template ::type> struct correct: not_implemented {}; template struct correct : detail::correct::correct_nop {}; template struct correct : detail::correct::correct_nop {}; template struct correct : detail::correct::correct_nop {}; template struct correct : detail::correct::correct_box {}; template struct correct : detail::correct::correct_ring < Ring, std::less::type> > {}; template struct correct : detail::correct::correct_polygon {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Corrects a geometry \details Corrects a geometry: all rings which are wrongly oriented with respect to their expected orientation are reversed. To all rings which do not have a closing point and are typed as they should have one, the first point is appended. Also boxes can be corrected. \ingroup correct \tparam Geometry \tparam_geometry \param geometry \param_geometry which will be corrected if necessary \qbk{[include reference/algorithms/correct.qbk]} */ template inline void correct(Geometry& geometry) { concept::check(); dispatch::correct::apply(geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_CORRECT_HPP covered_by.hpp000444000765000024 1430512161110676 25151 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP #define BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry1, typename Geometry2, typename Tag1 = typename tag::type, typename Tag2 = typename tag::type > struct covered_by: not_implemented {}; template struct covered_by { template static inline bool apply(Point const& point, Box const& box, Strategy const& strategy) { return strategy.apply(point, box); } }; template struct covered_by { template static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy) { assert_dimension_equal(); return strategy.apply(box1, box2); } }; template struct covered_by { template static inline bool apply(Point const& point, Ring const& ring, Strategy const& strategy) { return detail::within::point_in_ring < Point, Ring, order_as_direction::value>::value, geometry::closure::value, Strategy >::apply(point, ring, strategy) >= 0; } }; template struct covered_by { template static inline bool apply(Point const& point, Polygon const& polygon, Strategy const& strategy) { return detail::within::point_in_polygon < Point, Polygon, order_as_direction::value>::value, geometry::closure::value, Strategy >::apply(point, polygon, strategy) >= 0; } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_check12{is inside or on border} \ingroup covered_by \details \details_check12{covered_by, is inside or on border}. \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry which might be inside or on the border of the second geometry \param geometry2 \param_geometry which might cover the first geometry \return true if geometry1 is inside of or on the border of geometry2, else false \note The default strategy is used for covered_by detection \qbk{[include reference/algorithms/covered_by.qbk]} */ template inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check(); concept::check(); assert_dimension_equal(); typedef typename point_type::type point_type1; typedef typename point_type::type point_type2; typedef typename strategy::covered_by::services::default_strategy < typename tag::type, typename tag::type, typename tag::type, typename tag_cast::type, areal_tag>::type, typename tag_cast < typename cs_tag::type, spherical_tag >::type, typename tag_cast < typename cs_tag::type, spherical_tag >::type, Geometry1, Geometry2 >::type strategy_type; return dispatch::covered_by < Geometry1, Geometry2 >::apply(geometry1, geometry2, strategy_type()); } /*! \brief \brief_check12{is inside or on border} \brief_strategy \ingroup covered_by \details \details_check12{covered_by, is inside or on border}, \brief_strategy. \details_strategy_reasons \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry which might be inside or on the border of the second geometry \param geometry2 \param_geometry which might cover the first geometry \param strategy strategy to be used \return true if geometry1 is inside of or on the border of geometry2, else false \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/covered_by.qbk]} */ template inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy) { concept::within::check < typename tag::type, typename tag::type, typename tag_cast::type, areal_tag>::type, Strategy >(); concept::check(); concept::check(); assert_dimension_equal(); return dispatch::covered_by < Geometry1, Geometry2 >::apply(geometry1, geometry2, strategy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP difference.hpp000444000765000024 1062612161110664 25121 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace difference { /*! \brief_calc2{difference} \brief_strategy \ingroup difference \details \details_calc2{difference_insert, spatial set theoretic difference} \brief_strategy. \details_inserter{difference} \tparam GeometryOut output geometry type, must be specified \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam OutputIterator output iterator \tparam Strategy \tparam_strategy_overlay \param geometry1 \param_geometry \param geometry2 \param_geometry \param out \param_out{difference} \param strategy \param_strategy{difference} \return \return_out \qbk{distinguish,with strategy} */ template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator, typename Strategy > inline OutputIterator difference_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out, Strategy const& strategy) { concept::check(); concept::check(); concept::check(); return geometry::dispatch::intersection_insert < Geometry1, Geometry2, GeometryOut, overlay_difference, geometry::detail::overlay::do_reverse::value>::value, geometry::detail::overlay::do_reverse::value, true>::value >::apply(geometry1, geometry2, out, strategy); } /*! \brief_calc2{difference} \ingroup difference \details \details_calc2{difference_insert, spatial set theoretic difference}. \details_insert{difference} \tparam GeometryOut output geometry type, must be specified \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam OutputIterator output iterator \param geometry1 \param_geometry \param geometry2 \param_geometry \param out \param_out{difference} \return \return_out \qbk{[include reference/algorithms/difference_insert.qbk]} */ template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator > inline OutputIterator difference_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out) { concept::check(); concept::check(); concept::check(); typedef strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, typename geometry::point_type::type > strategy; return difference_insert(geometry1, geometry2, out, strategy()); } }} // namespace detail::difference #endif // DOXYGEN_NO_DETAIL /*! \brief_calc2{difference} \ingroup difference \details \details_calc2{difference, spatial set theoretic difference}. \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Collection \tparam_output_collection \param geometry1 \param_geometry \param geometry2 \param_geometry \param output_collection the output collection \qbk{[include reference/algorithms/difference.qbk]} */ template < typename Geometry1, typename Geometry2, typename Collection > inline void difference(Geometry1 const& geometry1, Geometry2 const& geometry2, Collection& output_collection) { concept::check(); concept::check(); typedef typename boost::range_value::type geometry_out; concept::check(); detail::difference::difference_insert( geometry1, geometry2, std::back_inserter(output_collection)); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP disjoint.hpp000444000765000024 2116112161110642 24642 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace disjoint { template struct check_each_ring_for_within { bool has_within; Geometry const& m_geometry; inline check_each_ring_for_within(Geometry const& g) : has_within(false) , m_geometry(g) {} template inline void apply(Range const& range) { typename geometry::point_type::type p; geometry::point_on_border(p, range); if (geometry::within(p, m_geometry)) { has_within = true; } } }; template inline bool rings_containing(FirstGeometry const& geometry1, SecondGeometry const& geometry2) { check_each_ring_for_within checker(geometry1); geometry::detail::for_each_range(geometry2, checker); return checker.has_within; } struct assign_disjoint_policy { // We want to include all points: static bool const include_no_turn = true; static bool const include_degenerate = true; static bool const include_opposite = true; // We don't assign extra info: template < typename Info, typename Point1, typename Point2, typename IntersectionInfo, typename DirInfo > static inline void apply(Info& , Point1 const& , Point2 const&, IntersectionInfo const&, DirInfo const&) {} }; template struct disjoint_linear { static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2) { typedef typename geometry::point_type::type point_type; typedef overlay::turn_info turn_info; std::deque turns; // Specify two policies: // 1) Stop at any intersection // 2) In assignment, include also degenerate points (which are normally skipped) disjoint_interrupt_policy policy; geometry::get_turns < false, false, assign_disjoint_policy >(geometry1, geometry2, turns, policy); if (policy.has_intersections) { return false; } return true; } }; template struct disjoint_segment { static inline bool apply(Segment1 const& segment1, Segment2 const& segment2) { typedef typename point_type::type point_type; segment_intersection_points is = strategy::intersection::relate_cartesian_segments < policies::relate::segments_intersection_points < Segment1, Segment2, segment_intersection_points > >::apply(segment1, segment2); return is.count == 0; } }; template struct general_areal { static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2) { if (! disjoint_linear::apply(geometry1, geometry2)) { return false; } // If there is no intersection of segments, they might located // inside each other if (rings_containing(geometry1, geometry2) || rings_containing(geometry2, geometry1)) { return false; } return true; } }; }} // namespace detail::disjoint #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry1, typename Geometry2, std::size_t DimensionCount = dimension::type::value, typename Tag1 = typename tag::type, typename Tag2 = typename tag::type, bool Reverse = reverse_dispatch::type::value > struct disjoint : detail::disjoint::general_areal {}; // If reversal is needed, perform it template < typename Geometry1, typename Geometry2, std::size_t DimensionCount, typename Tag1, typename Tag2 > struct disjoint : disjoint { static inline bool apply(Geometry1 const& g1, Geometry2 const& g2) { return disjoint < Geometry2, Geometry1, DimensionCount, Tag2, Tag1 >::apply(g2, g1); } }; template struct disjoint : detail::disjoint::point_point {}; template struct disjoint : detail::disjoint::box_box {}; template struct disjoint : detail::disjoint::point_box {}; template struct disjoint : detail::disjoint::reverse_covered_by {}; template struct disjoint : detail::disjoint::reverse_covered_by {}; template struct disjoint : detail::disjoint::disjoint_linear {}; template struct disjoint : detail::disjoint::disjoint_segment {}; template struct disjoint : detail::disjoint::disjoint_linear {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_check2{are disjoint} \ingroup disjoint \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry \param geometry2 \param_geometry \return \return_check2{are disjoint} \qbk{[include reference/algorithms/disjoint.qbk]} */ template inline bool disjoint(Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check_concepts_and_equal_dimensions < Geometry1 const, Geometry2 const >(); return dispatch::disjoint::apply(geometry1, geometry2); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP distance.hpp000444000765000024 4436512161110641 24623 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace distance { // To avoid spurious namespaces here: using strategy::distance::services::return_type; template struct point_to_point { static inline typename return_type::type apply(P1 const& p1, P2 const& p2, Strategy const& strategy) { return strategy.apply(p1, p2); } }; template struct point_to_segment { static inline typename return_type::type apply(Point const& point, Segment const& segment, Strategy const& ) { typename strategy::distance::services::default_strategy < segment_tag, Point, typename point_type::type, typename cs_tag::type, typename cs_tag::type>::type, Strategy >::type segment_strategy; typename point_type::type p[2]; geometry::detail::assign_point_from_index<0>(segment, p[0]); geometry::detail::assign_point_from_index<1>(segment, p[1]); return segment_strategy.apply(point, p[0], p[1]); } }; template < typename Point, typename Range, closure_selector Closure, typename PPStrategy, typename PSStrategy > struct point_to_range { typedef typename return_type::type return_type; static inline return_type apply(Point const& point, Range const& range, PPStrategy const& pp_strategy, PSStrategy const& ps_strategy) { return_type const zero = return_type(0); if (boost::size(range) == 0) { return zero; } typedef typename closeable_view::type view_type; view_type view(range); // line of one point: return point distance typedef typename boost::range_iterator::type iterator_type; iterator_type it = boost::begin(view); iterator_type prev = it++; if (it == boost::end(view)) { return pp_strategy.apply(point, *boost::begin(view)); } // Create comparable (more efficient) strategy typedef typename strategy::distance::services::comparable_type::type eps_strategy_type; eps_strategy_type eps_strategy = strategy::distance::services::get_comparable::apply(ps_strategy); // start with first segment distance return_type d = eps_strategy.apply(point, *prev, *it); return_type rd = ps_strategy.apply(point, *prev, *it); // check if other segments are closer for (++prev, ++it; it != boost::end(view); ++prev, ++it) { return_type const ds = eps_strategy.apply(point, *prev, *it); if (geometry::math::equals(ds, zero)) { return ds; } else if (ds < d) { d = ds; rd = ps_strategy.apply(point, *prev, *it); } } return rd; } }; template < typename Point, typename Ring, closure_selector Closure, typename PPStrategy, typename PSStrategy > struct point_to_ring { typedef std::pair < typename return_type::type, bool > distance_containment; static inline distance_containment apply(Point const& point, Ring const& ring, PPStrategy const& pp_strategy, PSStrategy const& ps_strategy) { return distance_containment ( point_to_range < Point, Ring, Closure, PPStrategy, PSStrategy >::apply(point, ring, pp_strategy, ps_strategy), geometry::within(point, ring) ); } }; template < typename Point, typename Polygon, closure_selector Closure, typename PPStrategy, typename PSStrategy > struct point_to_polygon { typedef typename return_type::type return_type; typedef std::pair distance_containment; static inline distance_containment apply(Point const& point, Polygon const& polygon, PPStrategy const& pp_strategy, PSStrategy const& ps_strategy) { // Check distance to all rings typedef point_to_ring < Point, typename ring_type::type, Closure, PPStrategy, PSStrategy > per_ring; distance_containment dc = per_ring::apply(point, exterior_ring(polygon), pp_strategy, ps_strategy); typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { distance_containment dcr = per_ring::apply(point, *it, pp_strategy, ps_strategy); if (dcr.first < dc.first) { dc.first = dcr.first; } // If it was inside, and also inside inner ring, // turn off the inside-flag, it is outside the polygon if (dc.second && dcr.second) { dc.second = false; } } return dc; } }; // Helper metafunction for default strategy retrieval template struct default_strategy : strategy::distance::services::default_strategy < point_tag, typename point_type::type, typename point_type::type > {}; }} // namespace detail::distance #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { using strategy::distance::services::return_type; template < typename Geometry1, typename Geometry2, typename Strategy = typename detail::distance::default_strategy::type, typename Tag1 = typename tag_cast::type, multi_tag>::type, typename Tag2 = typename tag_cast::type, multi_tag>::type, typename StrategyTag = typename strategy::distance::services::tag::type, bool Reverse = reverse_dispatch::type::value > struct distance: not_implemented {}; // If reversal is needed, perform it template < typename Geometry1, typename Geometry2, typename Strategy, typename Tag1, typename Tag2, typename StrategyTag > struct distance < Geometry1, Geometry2, Strategy, Tag1, Tag2, StrategyTag, true > : distance { static inline typename return_type::type apply( Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy) { return distance < Geometry2, Geometry1, Strategy, Tag2, Tag1, StrategyTag, false >::apply(g2, g1, strategy); } }; // If reversal is needed and we got the strategy by default, invert it before // proceeding to the reversal. template < typename Geometry1, typename Geometry2, typename Tag1, typename Tag2, typename StrategyTag > struct distance < Geometry1, Geometry2, typename detail::distance::default_strategy::type, Tag1, Tag2, StrategyTag, true > : distance < Geometry2, Geometry1, typename detail::distance::default_strategy::type, Tag2, Tag1, StrategyTag, false > { typedef typename detail::distance::default_strategy::type reversed_strategy; static inline typename strategy::distance::services::return_type::type apply( Geometry1 const& g1, Geometry2 const& g2, typename detail::distance::default_strategy::type const&) { return distance < Geometry2, Geometry1, reversed_strategy, Tag2, Tag1, StrategyTag, false >::apply(g2, g1, reversed_strategy()); } }; // Point-point template struct distance < P1, P2, Strategy, point_tag, point_tag, strategy_tag_distance_point_point, false > : detail::distance::point_to_point {}; // Point-line version 1, where point-point strategy is specified template struct distance < Point, Linestring, Strategy, point_tag, linestring_tag, strategy_tag_distance_point_point, false > { static inline typename return_type::type apply(Point const& point, Linestring const& linestring, Strategy const& strategy) { typedef typename strategy::distance::services::default_strategy < segment_tag, Point, typename point_type::type, typename cs_tag::type, typename cs_tag::type>::type, Strategy >::type ps_strategy_type; return detail::distance::point_to_range < Point, Linestring, closed, Strategy, ps_strategy_type >::apply(point, linestring, strategy, ps_strategy_type()); } }; // Point-line version 2, where point-segment strategy is specified template struct distance < Point, Linestring, Strategy, point_tag, linestring_tag, strategy_tag_distance_point_segment, false > { static inline typename return_type::type apply(Point const& point, Linestring const& linestring, Strategy const& strategy) { typedef typename Strategy::point_strategy_type pp_strategy_type; return detail::distance::point_to_range < Point, Linestring, closed, pp_strategy_type, Strategy >::apply(point, linestring, pp_strategy_type(), strategy); } }; // Point-ring , where point-segment strategy is specified template struct distance < Point, Ring, Strategy, point_tag, ring_tag, strategy_tag_distance_point_point, false > { typedef typename return_type::type return_type; static inline return_type apply(Point const& point, Ring const& ring, Strategy const& strategy) { typedef typename strategy::distance::services::default_strategy < segment_tag, Point, typename point_type::type >::type ps_strategy_type; std::pair dc = detail::distance::point_to_ring < Point, Ring, geometry::closure::value, Strategy, ps_strategy_type >::apply(point, ring, strategy, ps_strategy_type()); return dc.second ? return_type(0) : dc.first; } }; // Point-polygon , where point-segment strategy is specified template struct distance < Point, Polygon, Strategy, point_tag, polygon_tag, strategy_tag_distance_point_point, false > { typedef typename return_type::type return_type; static inline return_type apply(Point const& point, Polygon const& polygon, Strategy const& strategy) { typedef typename strategy::distance::services::default_strategy < segment_tag, Point, typename point_type::type >::type ps_strategy_type; std::pair dc = detail::distance::point_to_polygon < Point, Polygon, geometry::closure::value, Strategy, ps_strategy_type >::apply(point, polygon, strategy, ps_strategy_type()); return dc.second ? return_type(0) : dc.first; } }; // Point-segment version 1, with point-point strategy template struct distance < Point, Segment, Strategy, point_tag, segment_tag, strategy_tag_distance_point_point, false > : detail::distance::point_to_segment {}; // Point-segment version 2, with point-segment strategy template struct distance < Point, Segment, Strategy, point_tag, segment_tag, strategy_tag_distance_point_segment, false > { static inline typename return_type::type apply(Point const& point, Segment const& segment, Strategy const& strategy) { typename point_type::type p[2]; geometry::detail::assign_point_from_index<0>(segment, p[0]); geometry::detail::assign_point_from_index<1>(segment, p[1]); return strategy.apply(point, p[0], p[1]); } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_calc2{distance} \brief_strategy \ingroup distance \details \details \details_calc{area}. \brief_strategy. \details_strategy_reasons \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Strategy \tparam_strategy{Distance} \param geometry1 \param_geometry \param geometry2 \param_geometry \param strategy \param_strategy{distance} \return \return_calc{distance} \note The strategy can be a point-point strategy. In case of distance point-line/point-polygon it may also be a point-segment strategy. \qbk{distinguish,with strategy} \qbk{ [heading Available Strategies] \* [link geometry.reference.strategies.strategy_distance_pythagoras Pythagoras (cartesian)] \* [link geometry.reference.strategies.strategy_distance_haversine Haversine (spherical)] \* [link geometry.reference.strategies.strategy_distance_cross_track Cross track (spherical\, point-to-segment)] \* [link geometry.reference.strategies.strategy_distance_projected_point Projected point (cartesian\, point-to-segment)] \* more (currently extensions): Vincenty\, Andoyer (geographic) } */ /* Note, in case of a Compilation Error: if you get: - "Failed to specialize function template ..." - "error: no matching function for call to ..." for distance, it is probably so that there is no specialization for return_type<...> for your strategy. */ template inline typename strategy::distance::services::return_type::type distance( Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy) { concept::check(); concept::check(); detail::throw_on_empty_input(geometry1); detail::throw_on_empty_input(geometry2); return dispatch::distance < Geometry1, Geometry2, Strategy >::apply(geometry1, geometry2, strategy); } /*! \brief \brief_calc2{distance} \ingroup distance \details The default strategy is used, corresponding to the coordinate system of the geometries \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry \param geometry2 \param_geometry \return \return_calc{distance} \qbk{[include reference/algorithms/distance.qbk]} */ template inline typename default_distance_result::type distance( Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check(); concept::check(); return distance(geometry1, geometry2, typename detail::distance::default_strategy::type()); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP envelope.hpp000444000765000024 1123712161110700 24632 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_ENVELOPE_HPP #define BOOST_GEOMETRY_ALGORITHMS_ENVELOPE_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace envelope { /// Calculate envelope of an 2D or 3D segment struct envelope_expand_one { template static inline void apply(Geometry const& geometry, Box& mbr) { assign_inverse(mbr); geometry::expand(mbr, geometry); } }; /// Iterate through range (also used in multi*) template inline void envelope_range_additional(Range const& range, Box& mbr) { typedef typename boost::range_iterator::type iterator_type; for (iterator_type it = boost::begin(range); it != boost::end(range); ++it) { geometry::expand(mbr, *it); } } /// Generic range dispatching struct struct envelope_range { /// Calculate envelope of range using a strategy template static inline void apply(Range const& range, Box& mbr) { assign_inverse(mbr); envelope_range_additional(range, mbr); } }; }} // namespace detail::envelope #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag::type > struct envelope: not_implemented {}; template struct envelope : detail::envelope::envelope_expand_one {}; template struct envelope : detail::envelope::envelope_expand_one {}; template struct envelope : detail::envelope::envelope_expand_one {}; template struct envelope : detail::envelope::envelope_range {}; template struct envelope : detail::envelope::envelope_range {}; template struct envelope : detail::envelope::envelope_range { template static inline void apply(Polygon const& poly, Box& mbr) { // For polygon, inspecting outer ring is sufficient detail::envelope::envelope_range::apply(exterior_ring(poly), mbr); } }; } // namespace dispatch #endif /*! \brief \brief_calc{envelope} \ingroup envelope \details \details_calc{envelope,\det_envelope}. \tparam Geometry \tparam_geometry \tparam Box \tparam_box \param geometry \param_geometry \param mbr \param_box \param_set{envelope} \qbk{[include reference/algorithms/envelope.qbk]} \qbk{ [heading Example] [envelope] [envelope_output] } */ template inline void envelope(Geometry const& geometry, Box& mbr) { concept::check(); concept::check(); dispatch::envelope::apply(geometry, mbr); } /*! \brief \brief_calc{envelope} \ingroup envelope \details \details_calc{return_envelope,\det_envelope}. \details_return{envelope} \tparam Box \tparam_box \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_calc{envelope} \qbk{[include reference/algorithms/envelope.qbk]} \qbk{ [heading Example] [return_envelope] [return_envelope_output] } */ template inline Box return_envelope(Geometry const& geometry) { concept::check(); concept::check(); Box mbr; dispatch::envelope::apply(geometry, mbr); return mbr; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_ENVELOPE_HPP equals.hpp000444000765000024 1775112161110621 24320 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_EQUALS_HPP #define BOOST_GEOMETRY_ALGORITHMS_EQUALS_HPP #include #include #include #include #include #include #include #include #include #include // For trivial checks #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace equals { template < std::size_t Dimension, std::size_t DimensionCount > struct box_box { template static inline bool apply(Box1 const& box1, Box2 const& box2) { if (!geometry::math::equals(get(box1), get(box2)) || !geometry::math::equals(get(box1), get(box2))) { return false; } return box_box::apply(box1, box2); } }; template struct box_box { template static inline bool apply(Box1 const& , Box2 const& ) { return true; } }; struct area_check { template static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2) { return geometry::math::equals( geometry::area(geometry1), geometry::area(geometry2)); } }; struct length_check { template static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2) { return geometry::math::equals( geometry::length(geometry1), geometry::length(geometry2)); } }; template struct equals_by_collection { template static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2) { if (! TrivialCheck::apply(geometry1, geometry2)) { return false; } typedef typename geometry::select_most_precise < typename select_coordinate_type < Geometry1, Geometry2 >::type, double >::type calculation_type; typedef std::vector > v; v c1, c2; geometry::collect_vectors(c1, geometry1); geometry::collect_vectors(c2, geometry2); if (boost::size(c1) != boost::size(c2)) { return false; } std::sort(c1.begin(), c1.end()); std::sort(c2.begin(), c2.end()); // Just check if these vectors are equal. return std::equal(c1.begin(), c1.end(), c2.begin()); } }; }} // namespace detail::equals #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry1, typename Geometry2, typename Tag1 = typename tag::type, typename Tag2 = typename tag::type, std::size_t DimensionCount = dimension::type::value, bool Reverse = reverse_dispatch::type::value > struct equals: not_implemented {}; // If reversal is needed, perform it template < typename Geometry1, typename Geometry2, typename Tag1, typename Tag2, std::size_t DimensionCount > struct equals : equals { static inline bool apply(Geometry1 const& g1, Geometry2 const& g2) { return equals < Geometry2, Geometry1, Tag2, Tag1, DimensionCount, false >::apply(g2, g1); } }; template struct equals : geometry::detail::not_ < P1, P2, detail::disjoint::point_point > {}; template struct equals : detail::equals::box_box<0, DimensionCount> {}; template struct equals : detail::equals::equals_by_collection {}; template struct equals : detail::equals::equals_by_collection {}; template struct equals : detail::equals::equals_by_collection {}; template struct equals : detail::equals::equals_by_collection {}; template struct equals : detail::equals::equals_by_collection {}; template struct equals : detail::equals::equals_by_collection {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_check{are spatially equal} \details \details_check12{equals, is spatially equal}. Spatially equal means that the same point set is included. A box can therefore be spatially equal to a ring or a polygon, or a linestring can be spatially equal to a multi-linestring or a segment. This only theoretically, not all combinations are implemented yet. \ingroup equals \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry \param geometry2 \param_geometry \return \return_check2{are spatially equal} \qbk{[include reference/algorithms/equals.qbk]} */ template inline bool equals(Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check_concepts_and_equal_dimensions < Geometry1 const, Geometry2 const >(); return dispatch::equals::apply(geometry1, geometry2); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_EQUALS_HPP expand.hpp000444000765000024 2007312161110603 24274 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_EXPAND_HPP #define BOOST_GEOMETRY_ALGORITHMS_EXPAND_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace expand { template < typename StrategyLess, typename StrategyGreater, std::size_t Dimension, std::size_t DimensionCount > struct point_loop { template static inline void apply(Box& box, Point const& source) { typedef typename strategy::compare::detail::select_strategy < StrategyLess, 1, Point, Dimension >::type less_type; typedef typename strategy::compare::detail::select_strategy < StrategyGreater, -1, Point, Dimension >::type greater_type; typedef typename select_coordinate_type::type coordinate_type; less_type less; greater_type greater; coordinate_type const coord = get(source); if (less(coord, get(box))) { set(box, coord); } if (greater(coord, get(box))) { set(box, coord); } point_loop < StrategyLess, StrategyGreater, Dimension + 1, DimensionCount >::apply(box, source); } }; template < typename StrategyLess, typename StrategyGreater, std::size_t DimensionCount > struct point_loop < StrategyLess, StrategyGreater, DimensionCount, DimensionCount > { template static inline void apply(Box&, Point const&) {} }; template < typename StrategyLess, typename StrategyGreater, std::size_t Index, std::size_t Dimension, std::size_t DimensionCount > struct indexed_loop { template static inline void apply(Box& box, Geometry const& source) { typedef typename strategy::compare::detail::select_strategy < StrategyLess, 1, Box, Dimension >::type less_type; typedef typename strategy::compare::detail::select_strategy < StrategyGreater, -1, Box, Dimension >::type greater_type; typedef typename select_coordinate_type < Box, Geometry >::type coordinate_type; less_type less; greater_type greater; coordinate_type const coord = get(source); if (less(coord, get(box))) { set(box, coord); } if (greater(coord, get(box))) { set(box, coord); } indexed_loop < StrategyLess, StrategyGreater, Index, Dimension + 1, DimensionCount >::apply(box, source); } }; template < typename StrategyLess, typename StrategyGreater, std::size_t Index, std::size_t DimensionCount > struct indexed_loop < StrategyLess, StrategyGreater, Index, DimensionCount, DimensionCount > { template static inline void apply(Box&, Geometry const&) {} }; // Changes a box such that the other box is also contained by the box template < typename StrategyLess, typename StrategyGreater > struct expand_indexed { template static inline void apply(Box& box, Geometry const& geometry) { indexed_loop < StrategyLess, StrategyGreater, 0, 0, dimension::type::value >::apply(box, geometry); indexed_loop < StrategyLess, StrategyGreater, 1, 0, dimension::type::value >::apply(box, geometry); } }; }} // namespace detail::expand #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename GeometryOut, typename Geometry, typename StrategyLess = strategy::compare::default_strategy, typename StrategyGreater = strategy::compare::default_strategy, typename TagOut = typename tag::type, typename Tag = typename tag::type > struct expand: not_implemented {}; // Box + point -> new box containing also point template < typename BoxOut, typename Point, typename StrategyLess, typename StrategyGreater > struct expand : detail::expand::point_loop < StrategyLess, StrategyGreater, 0, dimension::type::value > {}; // Box + box -> new box containing two input boxes template < typename BoxOut, typename BoxIn, typename StrategyLess, typename StrategyGreater > struct expand : detail::expand::expand_indexed {}; template < typename Box, typename Segment, typename StrategyLess, typename StrategyGreater > struct expand : detail::expand::expand_indexed {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*** *! \brief Expands a box using the extend (envelope) of another geometry (box, point) \ingroup expand \tparam Box type of the box \tparam Geometry of second geometry, to be expanded with the box \param box box to expand another geometry with, might be changed \param geometry other geometry \param strategy_less \param strategy_greater \note Strategy is currently ignored * template < typename Box, typename Geometry, typename StrategyLess, typename StrategyGreater > inline void expand(Box& box, Geometry const& geometry, StrategyLess const& strategy_less, StrategyGreater const& strategy_greater) { concept::check_concepts_and_equal_dimensions(); dispatch::expand::apply(box, geometry); } ***/ /*! \brief Expands a box using the bounding box (envelope) of another geometry (box, point) \ingroup expand \tparam Box type of the box \tparam Geometry \tparam_geometry \param box box to be expanded using another geometry, mutable \param geometry \param_geometry geometry which envelope (bounding box) will be added to the box \qbk{[include reference/algorithms/expand.qbk]} */ template inline void expand(Box& box, Geometry const& geometry) { concept::check_concepts_and_equal_dimensions(); dispatch::expand::apply(box, geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_EXPAND_HPP for_each.hpp000444000765000024 1535512161110614 24574 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_FOR_EACH_HPP #define BOOST_GEOMETRY_ALGORITHMS_FOR_EACH_HPP #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace for_each { struct fe_point_per_point { template static inline void apply(Point& point, Functor& f) { f(point); } }; struct fe_point_per_segment { template static inline void apply(Point& , Functor& f) { // TODO: if non-const, we should extract the points from the segment // and call the functor on those two points } }; struct fe_range_per_point { template static inline void apply(Range& range, Functor& f) { // The previous implementation called the std library: // return (std::for_each(boost::begin(range), boost::end(range), f)); // But that is not accepted for capturing lambda's. // It needs to do it like that to return the state of Functor f (f is passed by value in std::for_each). // So we now loop manually. for (typename boost::range_iterator::type it = boost::begin(range); it != boost::end(range); ++it) { f(*it); } } }; struct fe_range_per_segment { template static inline void apply(Range& range, Functor& f) { typedef typename add_const_if_c < is_const::value, typename point_type::type >::type point_type; BOOST_AUTO_TPL(it, boost::begin(range)); BOOST_AUTO_TPL(previous, it++); while(it != boost::end(range)) { model::referring_segment s(*previous, *it); f(s); previous = it++; } } }; struct fe_polygon_per_point { template static inline void apply(Polygon& poly, Functor& f) { fe_range_per_point::apply(exterior_ring(poly), f); typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { fe_range_per_point::apply(*it, f); } } }; struct fe_polygon_per_segment { template static inline void apply(Polygon& poly, Functor& f) { fe_range_per_segment::apply(exterior_ring(poly), f); typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { fe_range_per_segment::apply(*it, f); } } }; }} // namespace detail::for_each #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag_cast::type, multi_tag>::type > struct for_each_point: not_implemented {}; template struct for_each_point : detail::for_each::fe_point_per_point {}; template struct for_each_point : detail::for_each::fe_range_per_point {}; template struct for_each_point : detail::for_each::fe_range_per_point {}; template struct for_each_point : detail::for_each::fe_polygon_per_point {}; template < typename Geometry, typename Tag = typename tag_cast::type, multi_tag>::type > struct for_each_segment: not_implemented {}; template struct for_each_segment : detail::for_each::fe_point_per_segment {}; template struct for_each_segment : detail::for_each::fe_range_per_segment {}; template struct for_each_segment : detail::for_each::fe_range_per_segment {}; template struct for_each_segment : detail::for_each::fe_polygon_per_segment {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brf_for_each{point} \details \det_for_each{point} \ingroup for_each \param geometry \param_geometry \param f \par_for_each_f{point} \tparam Geometry \tparam_geometry \tparam Functor \tparam_functor \qbk{[include reference/algorithms/for_each_point.qbk]} \qbk{[heading Example]} \qbk{[for_each_point] [for_each_point_output]} \qbk{[for_each_point_const] [for_each_point_const_output]} */ template inline Functor for_each_point(Geometry& geometry, Functor f) { concept::check(); dispatch::for_each_point::apply(geometry, f); return f; } /*! \brief \brf_for_each{segment} \details \det_for_each{segment} \ingroup for_each \param geometry \param_geometry \param f \par_for_each_f{segment} \tparam Geometry \tparam_geometry \tparam Functor \tparam_functor \qbk{[include reference/algorithms/for_each_segment.qbk]} \qbk{[heading Example]} \qbk{[for_each_segment_const] [for_each_segment_const_output]} */ template inline Functor for_each_segment(Geometry& geometry, Functor f) { concept::check(); dispatch::for_each_segment::apply(geometry, f); return f; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_FOR_EACH_HPP intersection.hpp000444000765000024 1311012161110667 25527 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_INTERSECTION_HPP #define BOOST_GEOMETRY_ALGORITHMS_INTERSECTION_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace intersection { template struct intersection_box_box { template < typename Box1, typename Box2, typename BoxOut, typename Strategy > static inline bool apply(Box1 const& box1, Box2 const& box2, BoxOut& box_out, Strategy const& strategy) { typedef typename coordinate_type::type ct; ct min1 = get(box1); ct min2 = get(box2); ct max1 = get(box1); ct max2 = get(box2); if (max1 < min2 || max2 < min1) { return false; } // Set dimensions of output coordinate set(box_out, min1 < min2 ? min2 : min1); set(box_out, max1 > max2 ? max2 : max1); return intersection_box_box ::apply(box1, box2, box_out, strategy); } }; template struct intersection_box_box { template < typename Box1, typename Box2, typename BoxOut, typename Strategy > static inline bool apply(Box1 const&, Box2 const&, BoxOut&, Strategy const&) { return true; } }; }} // namespace detail::intersection #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { // By default, all is forwarded to the intersection_insert-dispatcher template < typename Geometry1, typename Geometry2, typename Tag1 = typename geometry::tag::type, typename Tag2 = typename geometry::tag::type, bool Reverse = reverse_dispatch::type::value > struct intersection { template static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, GeometryOut& geometry_out, Strategy const& strategy) { typedef typename boost::range_value::type OneOut; intersection_insert < Geometry1, Geometry2, OneOut, overlay_intersection >::apply(geometry1, geometry2, std::back_inserter(geometry_out), strategy); return true; } }; // If reversal is needed, perform it template < typename Geometry1, typename Geometry2, typename Tag1, typename Tag2 > struct intersection < Geometry1, Geometry2, Tag1, Tag2, true > : intersection { template static inline bool apply( Geometry1 const& g1, Geometry2 const& g2, GeometryOut& out, Strategy const& strategy) { return intersection< Geometry2, Geometry1, Tag2, Tag1, false >::apply(g2, g1, out, strategy); } }; template < typename Box1, typename Box2, bool Reverse > struct intersection < Box1, Box2, box_tag, box_tag, Reverse > : public detail::intersection::intersection_box_box < 0, geometry::dimension::value > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_calc2{intersection} \ingroup intersection \details \details_calc2{intersection, spatial set theoretic intersection}. \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam GeometryOut Collection of geometries (e.g. std::vector, std::deque, boost::geometry::multi*) of which the value_type fulfills a \p_l_or_c concept, or it is the output geometry (e.g. for a box) \param geometry1 \param_geometry \param geometry2 \param_geometry \param geometry_out The output geometry, either a multi_point, multi_polygon, multi_linestring, or a box (for intersection of two boxes) \qbk{[include reference/algorithms/intersection.qbk]} */ template < typename Geometry1, typename Geometry2, typename GeometryOut > inline bool intersection(Geometry1 const& geometry1, Geometry2 const& geometry2, GeometryOut& geometry_out) { concept::check(); concept::check(); typedef strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, typename geometry::point_type::type > strategy; return dispatch::intersection< Geometry1, Geometry2 >::apply(geometry1, geometry2, geometry_out, strategy()); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_INTERSECTION_HPP intersects.hpp000444000765000024 641412161110655 25172 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_INTERSECTS_HPP #define BOOST_GEOMETRY_ALGORITHMS_INTERSECTS_HPP #include #include #include #include namespace boost { namespace geometry { /*! \brief \brief_check{has at least one intersection (crossing or self-tangency)} \note This function can be called for one geometry (self-intersection) and also for two geometries (intersection) \ingroup intersects \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_check{is self-intersecting} \qbk{distinguish,one geometry} \qbk{[def __one_parameter__]} \qbk{[include reference/algorithms/intersects.qbk]} */ template inline bool intersects(Geometry const& geometry) { concept::check(); typedef detail::overlay::turn_info < typename geometry::point_type::type > turn_info; std::deque turns; typedef typename strategy_intersection < typename cs_tag::type, Geometry, Geometry, typename geometry::point_type::type >::segment_intersection_strategy_type segment_intersection_strategy_type; typedef detail::overlay::get_turn_info < typename point_type::type, typename point_type::type, turn_info, detail::overlay::assign_null_policy > TurnPolicy; detail::disjoint::disjoint_interrupt_policy policy; detail::self_get_turn_points::get_turns < Geometry, std::deque, TurnPolicy, detail::disjoint::disjoint_interrupt_policy >::apply(geometry, turns, policy); return policy.has_intersections; } /*! \brief \brief_check2{have at least one intersection} \ingroup intersects \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry \param geometry2 \param_geometry \return \return_check2{intersect each other} \qbk{distinguish,two geometries} \qbk{[include reference/algorithms/intersects.qbk]} */ template inline bool intersects(Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check(); concept::check(); return ! geometry::disjoint(geometry1, geometry2); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_INTERSECTS_HPP length.hpp000444000765000024 1342112161110643 24301 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_LENGTH_HPP #define BOOST_GEOMETRY_ALGORITHMS_LENGTH_HPP #include #include #include #include #include #include #include #include #include // #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace length { template struct segment_length { template static inline typename default_length_result::type apply( Segment const& segment, Strategy const& strategy) { typedef typename point_type::type point_type; point_type p1, p2; geometry::detail::assign_point_from_index<0>(segment, p1); geometry::detail::assign_point_from_index<1>(segment, p2); return strategy.apply(p1, p2); } }; /*! \brief Internal, calculates length of a linestring using iterator pairs and specified strategy \note for_each could be used here, now that point_type is changed by boost range iterator */ template struct range_length { typedef typename default_length_result::type return_type; template static inline return_type apply( Range const& range, Strategy const& strategy) { typedef typename closeable_view::type view_type; typedef typename boost::range_iterator < view_type const >::type iterator_type; return_type sum = return_type(); view_type view(range); iterator_type it = boost::begin(view), end = boost::end(view); if(it != end) { for(iterator_type previous = it++; it != end; ++previous, ++it) { // Add point-point distance using the return type belonging // to strategy sum += strategy.apply(*previous, *it); } } return sum; } }; }} // namespace detail::length #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template ::type> struct length : detail::calculate_null { typedef typename default_length_result::type return_type; template static inline return_type apply(Geometry const& geometry, Strategy const& strategy) { return calculate_null::apply(geometry, strategy); } }; template struct length : detail::length::range_length {}; // RING: length is currently 0; it might be argued that it is the "perimeter" template struct length : detail::length::segment_length {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_calc{length} \ingroup length \details \details_calc{length, length (the sum of distances between consecutive points)}. \details_default_strategy \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_calc{length} \qbk{[include reference/algorithms/length.qbk]} \qbk{[length] [length_output]} */ template inline typename default_length_result::type length( Geometry const& geometry) { concept::check(); // detail::throw_on_empty_input(geometry); typedef typename strategy::distance::services::default_strategy < point_tag, typename point_type::type >::type strategy_type; return dispatch::length::apply(geometry, strategy_type()); } /*! \brief \brief_calc{length} \brief_strategy \ingroup length \details \details_calc{length, length (the sum of distances between consecutive points)} \brief_strategy. \details_strategy_reasons \tparam Geometry \tparam_geometry \tparam Strategy \tparam_strategy{distance} \param geometry \param_geometry \param strategy \param_strategy{distance} \return \return_calc{length} \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/length.qbk]} \qbk{[length_with_strategy] [length_with_strategy_output]} */ template inline typename default_length_result::type length( Geometry const& geometry, Strategy const& strategy) { concept::check(); // detail::throw_on_empty_input(geometry); return dispatch::length::apply(geometry, strategy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_LENGTH_HPP make.hpp000444000765000024 1236412161110603 23736 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_MAKE_HPP #define BOOST_GEOMETRY_ALGORITHMS_MAKE_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace make { /*! \brief Construct a geometry \ingroup make \tparam Geometry \tparam_geometry \tparam Range \tparam_range_point \param range \param_range_point \return The constructed geometry, here: a linestring or a ring \qbk{distinguish, with a range} \qbk{ [heading Example] [make_with_range] [make_with_range_output] [heading See also] \* [link geometry.reference.algorithms.assign.assign_points assign] } */ template inline Geometry make_points(Range const& range) { concept::check(); Geometry geometry; geometry::append(geometry, range); return geometry; } }} // namespace detail::make #endif // DOXYGEN_NO_DETAIL /*! \brief Construct a geometry \ingroup make \details \note It does not work with array-point types, like int[2] \tparam Geometry \tparam_geometry \tparam Type \tparam_numeric to specify the coordinates \param c1 \param_x \param c2 \param_y \return The constructed geometry, here: a 2D point \qbk{distinguish, 2 coordinate values} \qbk{ [heading Example] [make_2d_point] [make_2d_point_output] [heading See also] \* [link geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values assign] } */ template inline Geometry make(Type const& c1, Type const& c2) { concept::check(); Geometry geometry; dispatch::assign < typename tag::type, Geometry, geometry::dimension::type::value >::apply(geometry, c1, c2); return geometry; } /*! \brief Construct a geometry \ingroup make \tparam Geometry \tparam_geometry \tparam Type \tparam_numeric to specify the coordinates \param c1 \param_x \param c2 \param_y \param c3 \param_z \return The constructed geometry, here: a 3D point \qbk{distinguish, 3 coordinate values} \qbk{ [heading Example] [make_3d_point] [make_3d_point_output] [heading See also] \* [link geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values assign] } */ template inline Geometry make(Type const& c1, Type const& c2, Type const& c3) { concept::check(); Geometry geometry; dispatch::assign < typename tag::type, Geometry, geometry::dimension::type::value >::apply(geometry, c1, c2, c3); return geometry; } template inline Geometry make(Type const& c1, Type const& c2, Type const& c3, Type const& c4) { concept::check(); Geometry geometry; dispatch::assign < typename tag::type, Geometry, geometry::dimension::type::value >::apply(geometry, c1, c2, c3, c4); return geometry; } /*! \brief Construct a box with inverse infinite coordinates \ingroup make \details The make_inverse function initializes a 2D or 3D box with large coordinates, the min corner is very large, the max corner is very small. This is useful e.g. in combination with the expand function, to determine the bounding box of a series of geometries. \tparam Geometry \tparam_geometry \return The constructed geometry, here: a box \qbk{ [heading Example] [make_inverse] [make_inverse_output] [heading See also] \* [link geometry.reference.algorithms.assign.assign_inverse assign_inverse] } */ template inline Geometry make_inverse() { concept::check(); Geometry geometry; dispatch::assign_inverse < typename tag::type, Geometry >::apply(geometry); return geometry; } /*! \brief Construct a geometry with its coordinates initialized to zero \ingroup make \details The make_zero function initializes a 2D or 3D point or box with coordinates of zero \tparam Geometry \tparam_geometry \return The constructed and zero-initialized geometry */ template inline Geometry make_zero() { concept::check(); Geometry geometry; dispatch::assign_zero < typename tag::type, Geometry >::apply(geometry); return geometry; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_MAKE_HPP not_implemented.hpp000444000765000024 702412161110660 26164 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP #define BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP #include #include #include namespace boost { namespace geometry { namespace info { struct UNRECOGNIZED_GEOMETRY_TYPE {}; struct POINT {}; struct LINESTRING {}; struct POLYGON {}; struct RING {}; struct BOX {}; struct SEGMENT {}; struct MULTI_POINT {}; struct MULTI_LINESTRING {}; struct MULTI_POLYGON {}; struct GEOMETRY_COLLECTION {}; template struct DIMENSION {}; } namespace nyi { struct not_implemented_tag {}; template < typename Term1, typename Term2, typename Term3 > struct not_implemented_error { #ifndef BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD # define BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD false #endif BOOST_MPL_ASSERT_MSG ( BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD, THIS_OPERATION_IS_NOT_OR_NOT_YET_IMPLEMENTED, ( types ) ); }; template struct tag_to_term { typedef Tag type; }; template <> struct tag_to_term { typedef info::UNRECOGNIZED_GEOMETRY_TYPE type; }; template <> struct tag_to_term { typedef info::POINT type; }; template <> struct tag_to_term { typedef info::LINESTRING type; }; template <> struct tag_to_term { typedef info::POLYGON type; }; template <> struct tag_to_term { typedef info::RING type; }; template <> struct tag_to_term { typedef info::BOX type; }; template <> struct tag_to_term { typedef info::SEGMENT type; }; template <> struct tag_to_term { typedef info::MULTI_POINT type; }; template <> struct tag_to_term { typedef info::MULTI_LINESTRING type; }; template <> struct tag_to_term { typedef info::MULTI_POLYGON type; }; template <> struct tag_to_term { typedef info::GEOMETRY_COLLECTION type; }; template struct tag_to_term > { typedef info::DIMENSION type; }; } template < typename Term1 = void, typename Term2 = void, typename Term3 = void > struct not_implemented : nyi::not_implemented_tag, nyi::not_implemented_error < typename mpl::identity::type>::type, typename mpl::identity::type>::type, typename mpl::identity::type>::type > {}; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP num_geometries.hpp000444000765000024 431212161110624 26020 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_NUM_GEOMETRIES_HPP #define BOOST_GEOMETRY_ALGORITHMS_NUM_GEOMETRIES_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag_cast < typename tag::type, single_tag, multi_tag >::type > struct num_geometries: not_implemented {}; template struct num_geometries { static inline std::size_t apply(Geometry const&) { return 1; } }; } // namespace dispatch #endif /*! \brief \brief_calc{number of geometries} \ingroup num_geometries \details \details_calc{num_geometries, number of geometries}. \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_calc{number of geometries} \qbk{[include reference/algorithms/num_geometries.qbk]} */ template inline std::size_t num_geometries(Geometry const& geometry) { concept::check(); return dispatch::num_geometries::apply(geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_NUM_GEOMETRIES_HPP num_interior_rings.hpp000444000765000024 420712161110670 26716 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_NUM_INTERIOR_RINGS_HPP #define BOOST_GEOMETRY_ALGORITHMS_NUM_INTERIOR_RINGS_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template ::type> struct num_interior_rings { static inline std::size_t apply(Geometry const& ) { return 0; } }; template struct num_interior_rings { static inline std::size_t apply(Polygon const& polygon) { return boost::size(geometry::interior_rings(polygon)); } }; } // namespace dispatch #endif /*! \brief \brief_calc{number of interior rings} \ingroup num_interior_rings \details \details_calc{num_interior_rings, number of interior rings}. \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_calc{number of interior rings} \qbk{[include reference/algorithms/num_interior_rings.qbk]} \note Defined by OGC as "numInteriorRing". To be consistent with "numPoints" letter "s" is appended */ template inline std::size_t num_interior_rings(Geometry const& geometry) { return dispatch::num_interior_rings::apply(geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_NUM_INTERIOR_RINGS_HPP num_points.hpp000444000765000024 1061112161110635 25212 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_NUM_POINTS_HPP #define BOOST_GEOMETRY_ALGORITHMS_NUM_POINTS_HPP #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace num_points { struct range_count { template static inline std::size_t apply(Range const& range, bool add_for_open) { std::size_t n = boost::size(range); if (add_for_open && n > 0) { closure_selector const s = geometry::closure::value; if (s == open) { if (geometry::disjoint(*boost::begin(range), *(boost::begin(range) + n - 1))) { return n + 1; } } } return n; } }; template struct other_count { template static inline std::size_t apply(Geometry const&, bool) { return D; } }; struct polygon_count: private range_count { template static inline std::size_t apply(Polygon const& poly, bool add_for_open) { typedef typename geometry::ring_type::type ring_type; std::size_t n = range_count::apply( exterior_ring(poly), add_for_open); typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { n += range_count::apply(*it, add_for_open); } return n; } }; }} // namespace detail::num_points #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag_cast::type, multi_tag>::type > struct num_points: not_implemented {}; template struct num_points : detail::num_points::other_count<1> {}; template struct num_points : detail::num_points::other_count<4> {}; template struct num_points : detail::num_points::other_count<2> {}; template struct num_points : detail::num_points::range_count {}; template struct num_points : detail::num_points::range_count {}; template struct num_points : detail::num_points::polygon_count {}; } // namespace dispatch #endif /*! \brief \brief_calc{number of points} \ingroup num_points \details \details_calc{num_points, number of points}. \tparam Geometry \tparam_geometry \param geometry \param_geometry \param add_for_open add one for open geometries (i.e. polygon types which are not closed) \return \return_calc{number of points} \qbk{[include reference/algorithms/num_points.qbk]} */ template inline std::size_t num_points(Geometry const& geometry, bool add_for_open = false) { concept::check(); return dispatch::num_points::apply(geometry, add_for_open); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_NUM_POINTS_HPP overlaps.hpp000444000765000024 1151712161110617 24660 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_OVERLAPS_HPP #define BOOST_GEOMETRY_ALGORITHMS_OVERLAPS_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlaps { template < std::size_t Dimension, std::size_t DimensionCount > struct box_box_loop { template static inline void apply(Box1 const& b1, Box2 const& b2, bool& overlaps, bool& one_in_two, bool& two_in_one) { assert_dimension_equal(); typedef typename coordinate_type::type coordinate_type1; typedef typename coordinate_type::type coordinate_type2; coordinate_type1 const& min1 = get(b1); coordinate_type1 const& max1 = get(b1); coordinate_type2 const& min2 = get(b2); coordinate_type2 const& max2 = get(b2); // We might use the (not yet accepted) Boost.Interval // submission in the future // If: // B1: |-------| // B2: |------| // in any dimension -> no overlap if (max1 <= min2 || min1 >= max2) { overlaps = false; return; } // If: // B1: |--------------------| // B2: |-------------| // in all dimensions -> within, then no overlap // B1: |--------------------| // B2: |-------------| // this is "within-touch" -> then no overlap. So use < and > if (min1 < min2 || max1 > max2) { one_in_two = false; } // Same other way round if (min2 < min1 || max2 > max1) { two_in_one = false; } box_box_loop < Dimension + 1, DimensionCount >::apply(b1, b2, overlaps, one_in_two, two_in_one); } }; template < std::size_t DimensionCount > struct box_box_loop { template static inline void apply(Box1 const& , Box2 const&, bool&, bool&, bool&) { } }; struct box_box { template static inline bool apply(Box1 const& b1, Box2 const& b2) { bool overlaps = true; bool within1 = true; bool within2 = true; box_box_loop < 0, dimension::type::value >::apply(b1, b2, overlaps, within1, within2); /* \see http://docs.codehaus.org/display/GEOTDOC/02+Geometry+Relationships#02GeometryRelationships-Overlaps where is stated that "inside" is not an "overlap", this is true and is implemented as such. */ return overlaps && ! within1 && ! within2; } }; }} // namespace detail::overlaps #endif // DOXYGEN_NO_DETAIL //struct not_implemented_for_this_geometry_type : public boost::false_type {}; #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry1, typename Geometry2, typename Tag1 = typename tag::type, typename Tag2 = typename tag::type > struct overlaps: not_implemented {}; template struct overlaps : detail::overlaps::box_box {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_check2{overlap} \ingroup overlaps \return \return_check2{overlap} \qbk{[include reference/algorithms/overlaps.qbk]} */ template inline bool overlaps(Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check(); concept::check(); return dispatch::overlaps < Geometry1, Geometry2 >::apply(geometry1, geometry2); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_OVERLAPS_HPP perimeter.hpp000444000765000024 1045312161110647 25022 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_PERIMETER_HPP #define BOOST_GEOMETRY_ALGORITHMS_PERIMETER_HPP #include #include #include #include #include #include #include // #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { // Default perimeter is 0.0, specializations implement calculated values template ::type> struct perimeter : detail::calculate_null { typedef typename default_length_result::type return_type; template static inline return_type apply(Geometry const& geometry, Strategy const& strategy) { return calculate_null::apply(geometry, strategy); } }; template struct perimeter : detail::length::range_length < Geometry, closure::value > {}; template struct perimeter : detail::calculate_polygon_sum { typedef typename default_length_result::type return_type; typedef detail::length::range_length < typename ring_type::type, closure::value > policy; template static inline return_type apply(Polygon const& polygon, Strategy const& strategy) { return calculate_polygon_sum::apply(polygon, strategy); } }; // box,n-sphere: to be implemented } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_calc{perimeter} \ingroup perimeter \details The function perimeter returns the perimeter of a geometry, using the default distance-calculation-strategy \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_calc{perimeter} \qbk{[include reference/algorithms/perimeter.qbk]} */ template inline typename default_length_result::type perimeter( Geometry const& geometry) { concept::check(); typedef typename point_type::type point_type; typedef typename strategy::distance::services::default_strategy < point_tag, point_type >::type strategy_type; // detail::throw_on_empty_input(geometry); return dispatch::perimeter::apply(geometry, strategy_type()); } /*! \brief \brief_calc{perimeter} \brief_strategy \ingroup perimeter \details The function perimeter returns the perimeter of a geometry, using specified strategy \tparam Geometry \tparam_geometry \tparam Strategy \tparam_strategy{distance} \param geometry \param_geometry \param strategy strategy to be used for distance calculations. \return \return_calc{perimeter} \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/perimeter.qbk]} */ template inline typename default_length_result::type perimeter( Geometry const& geometry, Strategy const& strategy) { concept::check(); // detail::throw_on_empty_input(geometry); return dispatch::perimeter::apply(geometry, strategy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_PERIMETER_HPP reverse.hpp000444000765000024 600212161110600 24441 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_REVERSE_HPP #define BOOST_GEOMETRY_ALGORITHMS_REVERSE_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace reverse { struct range_reverse { template static inline void apply(Range& range) { std::reverse(boost::begin(range), boost::end(range)); } }; struct polygon_reverse: private range_reverse { template static inline void apply(Polygon& polygon) { typedef typename geometry::ring_type::type ring_type; range_reverse::apply(exterior_ring(polygon)); typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { range_reverse::apply(*it); } } }; }} // namespace detail::reverse #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template ::type> struct reverse { static inline void apply(Geometry&) {} }; template struct reverse : detail::reverse::range_reverse {}; template struct reverse : detail::reverse::range_reverse {}; template struct reverse : detail::reverse::polygon_reverse {}; } // namespace dispatch #endif /*! \brief Reverses the points within a geometry \details Generic function to reverse a geometry. It resembles the std::reverse functionality, but it takes the geometry type into account. Only for a ring or for a linestring it is the same as the std::reverse. \ingroup reverse \tparam Geometry \tparam_geometry \param geometry \param_geometry which will be reversed \qbk{[include reference/algorithms/reverse.qbk]} */ template inline void reverse(Geometry& geometry) { concept::check(); dispatch::reverse::apply(geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_REVERSE_HPP simplify.hpp000444000765000024 2712212161110646 24662 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_SIMPLIFY_HPP #define BOOST_GEOMETRY_ALGORITHMS_SIMPLIFY_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace simplify { struct simplify_range_insert { template static inline void apply(Range const& range, OutputIterator out, Distance const& max_distance, Strategy const& strategy) { if (boost::size(range) <= 2 || max_distance < 0) { std::copy(boost::begin(range), boost::end(range), out); } else { strategy.apply(range, out, max_distance); } } }; struct simplify_copy { template static inline void apply(Range const& range, Range& out, Distance const& , Strategy const& ) { std::copy ( boost::begin(range), boost::end(range), std::back_inserter(out) ); } }; template struct simplify_range { template static inline void apply(Range const& range, Range& out, Distance const& max_distance, Strategy const& strategy) { // Call do_container for a linestring / ring /* For a RING: The first/last point (the closing point of the ring) should maybe be excluded because it lies on a line with second/one but last. Here it is never excluded. Note also that, especially if max_distance is too large, the output ring might be self intersecting while the input ring is not, although chances are low in normal polygons Finally the inputring might have 3 (open) or 4 (closed) points (=correct), the output < 3 or 4(=wrong) */ if (boost::size(range) <= int(Minimum) || max_distance < 0.0) { simplify_copy::apply(range, out, max_distance, strategy); } else { simplify_range_insert::apply ( range, std::back_inserter(out), max_distance, strategy ); } } }; struct simplify_polygon { template static inline void apply(Polygon const& poly_in, Polygon& poly_out, Distance const& max_distance, Strategy const& strategy) { typedef typename ring_type::type ring_type; int const Minimum = core_detail::closure::minimum_ring_size < geometry::closure::value >::value; // Note that if there are inner rings, and distance is too large, // they might intersect with the outer ring in the output, // while it didn't in the input. simplify_range::apply(exterior_ring(poly_in), exterior_ring(poly_out), max_distance, strategy); traits::resize < typename boost::remove_reference < typename traits::interior_mutable_type::type >::type >::apply(interior_rings(poly_out), num_interior_rings(poly_in)); typename interior_return_type::type rings_in = interior_rings(poly_in); typename interior_return_type::type rings_out = interior_rings(poly_out); BOOST_AUTO_TPL(it_out, boost::begin(rings_out)); for (BOOST_AUTO_TPL(it_in, boost::begin(rings_in)); it_in != boost::end(rings_in); ++it_in, ++it_out) { simplify_range::apply(*it_in, *it_out, max_distance, strategy); } } }; }} // namespace detail::simplify #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag::type > struct simplify: not_implemented {}; template struct simplify { template static inline void apply(Point const& point, Point& out, Distance const& , Strategy const& ) { geometry::convert(point, out); } }; template struct simplify : detail::simplify::simplify_range<2> {}; template struct simplify : detail::simplify::simplify_range < core_detail::closure::minimum_ring_size < geometry::closure::value >::value > {}; template struct simplify : detail::simplify::simplify_polygon {}; template < typename Geometry, typename Tag = typename tag::type > struct simplify_insert: not_implemented {}; template struct simplify_insert : detail::simplify::simplify_range_insert {}; template struct simplify_insert : detail::simplify::simplify_range_insert {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Simplify a geometry using a specified strategy \ingroup simplify \tparam Geometry \tparam_geometry \tparam Distance A numerical distance measure \tparam Strategy A type fulfilling a SimplifyStrategy concept \param strategy A strategy to calculate simplification \param geometry input geometry, to be simplified \param out output geometry, simplified version of the input geometry \param max_distance distance (in units of input coordinates) of a vertex to other segments to be removed \param strategy simplify strategy to be used for simplification, might include point-distance strategy \image html svg_simplify_country.png "The image below presents the simplified country" \qbk{distinguish,with strategy} */ template inline void simplify(Geometry const& geometry, Geometry& out, Distance const& max_distance, Strategy const& strategy) { concept::check(); BOOST_CONCEPT_ASSERT( (geometry::concept::SimplifyStrategy) ); geometry::clear(out); dispatch::simplify::apply(geometry, out, max_distance, strategy); } /*! \brief Simplify a geometry \ingroup simplify \tparam Geometry \tparam_geometry \tparam Distance \tparam_numeric \note This version of simplify simplifies a geometry using the default strategy (Douglas Peucker), \param geometry input geometry, to be simplified \param out output geometry, simplified version of the input geometry \param max_distance distance (in units of input coordinates) of a vertex to other segments to be removed \qbk{[include reference/algorithms/simplify.qbk]} */ template inline void simplify(Geometry const& geometry, Geometry& out, Distance const& max_distance) { concept::check(); typedef typename point_type::type point_type; typedef typename strategy::distance::services::default_strategy < segment_tag, point_type >::type ds_strategy_type; typedef strategy::simplify::douglas_peucker < point_type, ds_strategy_type > strategy_type; simplify(geometry, out, max_distance, strategy_type()); } #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace simplify { /*! \brief Simplify a geometry, using an output iterator and a specified strategy \ingroup simplify \tparam Geometry \tparam_geometry \param geometry input geometry, to be simplified \param out output iterator, outputs all simplified points \param max_distance distance (in units of input coordinates) of a vertex to other segments to be removed \param strategy simplify strategy to be used for simplification, might include point-distance strategy \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/simplify.qbk]} */ template inline void simplify_insert(Geometry const& geometry, OutputIterator out, Distance const& max_distance, Strategy const& strategy) { concept::check(); BOOST_CONCEPT_ASSERT( (geometry::concept::SimplifyStrategy) ); dispatch::simplify_insert::apply(geometry, out, max_distance, strategy); } /*! \brief Simplify a geometry, using an output iterator \ingroup simplify \tparam Geometry \tparam_geometry \param geometry input geometry, to be simplified \param out output iterator, outputs all simplified points \param max_distance distance (in units of input coordinates) of a vertex to other segments to be removed \qbk{[include reference/algorithms/simplify_insert.qbk]} */ template inline void simplify_insert(Geometry const& geometry, OutputIterator out, Distance const& max_distance) { typedef typename point_type::type point_type; // Concept: output point type = point type of input geometry concept::check(); concept::check(); typedef typename strategy::distance::services::default_strategy < segment_tag, point_type >::type ds_strategy_type; typedef strategy::simplify::douglas_peucker < point_type, ds_strategy_type > strategy_type; dispatch::simplify_insert::apply(geometry, out, max_distance, strategy_type()); } }} // namespace detail::simplify #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_SIMPLIFY_HPP sym_difference.hpp000444000765000024 1201412161110643 25777 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_SYM_DIFFERENCE_HPP #define BOOST_GEOMETRY_ALGORITHMS_SYM_DIFFERENCE_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace sym_difference { /*! \brief \brief_calc2{symmetric difference} \brief_strategy \ingroup sym_difference \details \details_calc2{symmetric difference, spatial set theoretic symmetric difference (XOR)} \brief_strategy. \details_insert{sym_difference} \tparam GeometryOut output geometry type, must be specified \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Strategy \tparam_strategy_overlay \param geometry1 \param_geometry \param geometry2 \param_geometry \param out \param_out{difference} \param strategy \param_strategy{difference} \return \return_out \qbk{distinguish,with strategy} */ template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator, typename Strategy > inline OutputIterator sym_difference_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out, Strategy const& strategy) { concept::check(); concept::check(); concept::check(); out = geometry::dispatch::intersection_insert < Geometry1, Geometry2, GeometryOut, overlay_difference, geometry::detail::overlay::do_reverse::value>::value, geometry::detail::overlay::do_reverse::value, true>::value >::apply(geometry1, geometry2, out, strategy); out = geometry::dispatch::intersection_insert < Geometry2, Geometry1, GeometryOut, overlay_difference, geometry::detail::overlay::do_reverse::value>::value, geometry::detail::overlay::do_reverse::value, true>::value, geometry::detail::overlay::do_reverse::value>::value >::apply(geometry2, geometry1, out, strategy); return out; } /*! \brief \brief_calc2{symmetric difference} \ingroup sym_difference \details \details_calc2{symmetric difference, spatial set theoretic symmetric difference (XOR)} \details_insert{sym_difference} \tparam GeometryOut output geometry type, must be specified \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry \param geometry2 \param_geometry \param out \param_out{difference} \return \return_out */ template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator > inline OutputIterator sym_difference_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out) { concept::check(); concept::check(); concept::check(); typedef strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, typename geometry::point_type::type > strategy_type; return sym_difference_insert(geometry1, geometry2, out, strategy_type()); } }} // namespace detail::sym_difference #endif // DOXYGEN_NO_DETAIL /*! \brief \brief_calc2{symmetric difference} \ingroup sym_difference \details \details_calc2{symmetric difference, spatial set theoretic symmetric difference (XOR)}. \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Collection output collection, either a multi-geometry, or a std::vector / std::deque etc \param geometry1 \param_geometry \param geometry2 \param_geometry \param output_collection the output collection \qbk{[include reference/algorithms/sym_difference.qbk]} */ template < typename Geometry1, typename Geometry2, typename Collection > inline void sym_difference(Geometry1 const& geometry1, Geometry2 const& geometry2, Collection& output_collection) { concept::check(); concept::check(); typedef typename boost::range_value::type geometry_out; concept::check(); detail::sym_difference::sym_difference_insert( geometry1, geometry2, std::back_inserter(output_collection)); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_SYM_DIFFERENCE_HPP touches.hpp000444000765000024 1320312161110611 24463 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP #define BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace detail { namespace touches { template inline bool ok_for_touch(Turn const& turn) { return turn.both(detail::overlay::operation_union) || turn.both(detail::overlay::operation_blocked) || turn.combination(detail::overlay::operation_union, detail::overlay::operation_blocked) ; } template inline bool has_only_turns(Turns const& turns) { bool has_touch = false; typedef typename boost::range_iterator::type iterator_type; for (iterator_type it = boost::begin(turns); it != boost::end(turns); ++it) { if (it->has(detail::overlay::operation_intersection)) { return false; } switch(it->method) { case detail::overlay::method_crosses: return false; case detail::overlay::method_equal: // Segment spatially equal means: at the right side // the polygon internally overlaps. So return false. return false; case detail::overlay::method_touch: case detail::overlay::method_touch_interior: case detail::overlay::method_collinear: if (ok_for_touch(*it)) { has_touch = true; } else { return false; } break; case detail::overlay::method_none : case detail::overlay::method_disjoint : case detail::overlay::method_error : break; } } return has_touch; } }} /*! \brief \brief_check{has at least one touching point (self-tangency)} \note This function can be called for one geometry (self-tangency) and also for two geometries (touch) \ingroup touches \tparam Geometry \tparam_geometry \param geometry \param_geometry \return \return_check{is self-touching} \qbk{distinguish,one geometry} \qbk{[def __one_parameter__]} \qbk{[include reference/algorithms/touches.qbk]} */ template inline bool touches(Geometry const& geometry) { concept::check(); typedef detail::overlay::turn_info < typename geometry::point_type::type > turn_info; typedef detail::overlay::get_turn_info < typename point_type::type, typename point_type::type, turn_info, detail::overlay::assign_null_policy > policy_type; std::deque turns; detail::self_get_turn_points::no_interrupt_policy policy; detail::self_get_turn_points::get_turns < Geometry, std::deque, policy_type, detail::self_get_turn_points::no_interrupt_policy >::apply(geometry, turns, policy); return detail::touches::has_only_turns(turns); } /*! \brief \brief_check2{have at least one touching point (tangent - non overlapping)} \ingroup touches \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry \param geometry2 \param_geometry \return \return_check2{touch each other} \qbk{distinguish,two geometries} \qbk{[include reference/algorithms/touches.qbk]} */ template inline bool touches(Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check(); concept::check(); typedef detail::overlay::turn_info < typename geometry::point_type::type > turn_info; typedef detail::overlay::get_turn_info < typename point_type::type, typename point_type::type, turn_info, detail::overlay::assign_null_policy > policy_type; std::deque turns; detail::get_turns::no_interrupt_policy policy; boost::geometry::get_turns < false, false, detail::overlay::assign_null_policy >(geometry1, geometry2, turns, policy); return detail::touches::has_only_turns(turns) && ! geometry::detail::disjoint::rings_containing(geometry1, geometry2) && ! geometry::detail::disjoint::rings_containing(geometry2, geometry1) ; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP transform.hpp000444000765000024 2434212161110600 25030 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_TRANSFORM_HPP #define BOOST_GEOMETRY_ALGORITHMS_TRANSFORM_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace transform { struct transform_point { template static inline bool apply(Point1 const& p1, Point2& p2, Strategy const& strategy) { return strategy.apply(p1, p2); } }; struct transform_box { template static inline bool apply(Box1 const& b1, Box2& b2, Strategy const& strategy) { typedef typename point_type::type point_type1; typedef typename point_type::type point_type2; point_type1 lower_left, upper_right; detail::assign::assign_box_2d_corner( b1, lower_left); detail::assign::assign_box_2d_corner( b1, upper_right); point_type2 p1, p2; if (strategy.apply(lower_left, p1) && strategy.apply(upper_right, p2)) { // Create a valid box and therefore swap if necessary typedef typename coordinate_type::type coordinate_type; coordinate_type x1 = geometry::get<0>(p1) , y1 = geometry::get<1>(p1) , x2 = geometry::get<0>(p2) , y2 = geometry::get<1>(p2); if (x1 > x2) { std::swap(x1, x2); } if (y1 > y2) { std::swap(y1, y2); } set(b2, x1); set(b2, y1); set(b2, x2); set(b2, y2); return true; } return false; } }; struct transform_box_or_segment { template static inline bool apply(Geometry1 const& source, Geometry2& target, Strategy const& strategy) { typedef typename point_type::type point_type1; typedef typename point_type::type point_type2; point_type1 source_point[2]; geometry::detail::assign_point_from_index<0>(source, source_point[0]); geometry::detail::assign_point_from_index<1>(source, source_point[1]); point_type2 target_point[2]; if (strategy.apply(source_point[0], target_point[0]) && strategy.apply(source_point[1], target_point[1])) { geometry::detail::assign_point_to_index<0>(target_point[0], target); geometry::detail::assign_point_to_index<1>(target_point[1], target); return true; } return false; } }; template < typename PointOut, typename OutputIterator, typename Range, typename Strategy > inline bool transform_range_out(Range const& range, OutputIterator out, Strategy const& strategy) { PointOut point_out; for(typename boost::range_iterator::type it = boost::begin(range); it != boost::end(range); ++it) { if (! transform_point::apply(*it, point_out, strategy)) { return false; } *out++ = point_out; } return true; } struct transform_polygon { template static inline bool apply(Polygon1 const& poly1, Polygon2& poly2, Strategy const& strategy) { typedef typename ring_type::type ring1_type; typedef typename ring_type::type ring2_type; typedef typename point_type::type point2_type; geometry::clear(poly2); if (!transform_range_out(exterior_ring(poly1), std::back_inserter(exterior_ring(poly2)), strategy)) { return false; } // Note: here a resizeable container is assumed. traits::resize < typename boost::remove_reference < typename traits::interior_mutable_type::type >::type >::apply(interior_rings(poly2), num_interior_rings(poly1)); typename interior_return_type::type rings1 = interior_rings(poly1); typename interior_return_type::type rings2 = interior_rings(poly2); BOOST_AUTO_TPL(it1, boost::begin(rings1)); BOOST_AUTO_TPL(it2, boost::begin(rings2)); for ( ; it1 != boost::end(interior_rings(poly1)); ++it1, ++it2) { if (!transform_range_out(*it1, std::back_inserter(*it2), strategy)) { return false; } } return true; } }; template struct select_strategy { typedef typename strategy::transform::services::default_strategy < typename cs_tag::type, typename cs_tag::type, typename coordinate_system::type, typename coordinate_system::type, dimension::type::value, dimension::type::value, typename point_type::type, typename point_type::type >::type type; }; struct transform_range { template static inline bool apply(Range1 const& range1, Range2& range2, Strategy const& strategy) { typedef typename point_type::type point_type; // Should NOT be done here! // geometry::clear(range2); return transform_range_out(range1, std::back_inserter(range2), strategy); } }; }} // namespace detail::transform #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry1, typename Geometry2, typename Tag1 = typename tag_cast::type, multi_tag>::type, typename Tag2 = typename tag_cast::type, multi_tag>::type > struct transform {}; template struct transform : detail::transform::transform_point { }; template struct transform < Linestring1, Linestring2, linestring_tag, linestring_tag > : detail::transform::transform_range { }; template struct transform : detail::transform::transform_range { }; template struct transform : detail::transform::transform_polygon { }; template struct transform : detail::transform::transform_box { }; template struct transform : detail::transform::transform_box_or_segment { }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Transforms from one geometry to another geometry \brief_strategy \ingroup transform \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Strategy strategy \param geometry1 \param_geometry \param geometry2 \param_geometry \param strategy The strategy to be used for transformation \return True if the transformation could be done \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/transform_with_strategy.qbk]} */ template inline bool transform(Geometry1 const& geometry1, Geometry2& geometry2, Strategy const& strategy) { concept::check(); concept::check(); typedef dispatch::transform transform_type; return transform_type::apply(geometry1, geometry2, strategy); } /*! \brief Transforms from one geometry to another geometry using a strategy \ingroup transform \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry \param geometry2 \param_geometry \return True if the transformation could be done \qbk{[include reference/algorithms/transform.qbk]} */ template inline bool transform(Geometry1 const& geometry1, Geometry2& geometry2) { concept::check(); concept::check(); typename detail::transform::select_strategy::type strategy; return transform(geometry1, geometry2, strategy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_TRANSFORM_HPP union.hpp000444000765000024 1611512161110610 24145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_UNION_HPP #define BOOST_GEOMETRY_ALGORITHMS_UNION_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry1, typename Geometry2, typename GeometryOut, typename TagIn1 = typename tag::type, typename TagIn2 = typename tag::type, typename TagOut = typename tag::type, bool Areal1 = geometry::is_areal::value, bool Areal2 = geometry::is_areal::value, bool ArealOut = geometry::is_areal::value, bool Reverse1 = detail::overlay::do_reverse::value>::value, bool Reverse2 = detail::overlay::do_reverse::value>::value, bool ReverseOut = detail::overlay::do_reverse::value>::value, bool Reverse = geometry::reverse_dispatch::type::value > struct union_insert: not_implemented {}; // If reversal is needed, perform it first template < typename Geometry1, typename Geometry2, typename GeometryOut, typename TagIn1, typename TagIn2, typename TagOut, bool Reverse1, bool Reverse2, bool ReverseOut > struct union_insert < Geometry1, Geometry2, GeometryOut, TagIn1, TagIn2, TagOut, true, true, true, Reverse1, Reverse2, ReverseOut, true >: union_insert { template static inline OutputIterator apply(Geometry1 const& g1, Geometry2 const& g2, OutputIterator out, Strategy const& strategy) { return union_insert < Geometry2, Geometry1, GeometryOut >::apply(g2, g1, out, strategy); } }; template < typename Geometry1, typename Geometry2, typename GeometryOut, typename TagIn1, typename TagIn2, typename TagOut, bool Reverse1, bool Reverse2, bool ReverseOut > struct union_insert < Geometry1, Geometry2, GeometryOut, TagIn1, TagIn2, TagOut, true, true, true, Reverse1, Reverse2, ReverseOut, false > : detail::overlay::overlay {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace union_ { template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator, typename Strategy > inline OutputIterator insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out, Strategy const& strategy) { return dispatch::union_insert < Geometry1, Geometry2, GeometryOut >::apply(geometry1, geometry2, out, strategy); } /*! \brief_calc2{union} \brief_strategy \ingroup union \details \details_calc2{union_insert, spatial set theoretic union} \brief_strategy. details_insert{union} \tparam GeometryOut output geometry type, must be specified \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam OutputIterator output iterator \tparam Strategy \tparam_strategy_overlay \param geometry1 \param_geometry \param geometry2 \param_geometry \param out \param_out{union} \param strategy \param_strategy{union} \return \return_out \qbk{distinguish,with strategy} */ template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator, typename Strategy > inline OutputIterator union_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out, Strategy const& strategy) { concept::check(); concept::check(); concept::check(); return detail::union_::insert(geometry1, geometry2, out, strategy); } /*! \brief_calc2{union} \ingroup union \details \details_calc2{union_insert, spatial set theoretic union}. \details_insert{union} \tparam GeometryOut output geometry type, must be specified \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam OutputIterator output iterator \param geometry1 \param_geometry \param geometry2 \param_geometry \param out \param_out{union} \return \return_out */ template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator > inline OutputIterator union_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out) { concept::check(); concept::check(); concept::check(); typedef strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, typename geometry::point_type::type > strategy; return union_insert(geometry1, geometry2, out, strategy()); } }} // namespace detail::union_ #endif // DOXYGEN_NO_DETAIL /*! \brief Combines two geometries which each other \ingroup union \details \details_calc2{union, spatial set theoretic union}. \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Collection output collection, either a multi-geometry, or a std::vector / std::deque etc \param geometry1 \param_geometry \param geometry2 \param_geometry \param output_collection the output collection \note Called union_ because union is a reserved word. \qbk{[include reference/algorithms/union.qbk]} */ template < typename Geometry1, typename Geometry2, typename Collection > inline void union_(Geometry1 const& geometry1, Geometry2 const& geometry2, Collection& output_collection) { concept::check(); concept::check(); typedef typename boost::range_value::type geometry_out; concept::check(); detail::union_::union_insert(geometry1, geometry2, std::back_inserter(output_collection)); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_UNION_HPP unique.hpp000444000765000024 706212161110653 24313 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_UNIQUE_HPP #define BOOST_GEOMETRY_ALGORITHMS_UNIQUE_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace unique { struct range_unique { template static inline void apply(Range& range, ComparePolicy const& policy) { typename boost::range_iterator::type it = std::unique ( boost::begin(range), boost::end(range), policy ); traits::resize::apply(range, it - boost::begin(range)); } }; struct polygon_unique { template static inline void apply(Polygon& polygon, ComparePolicy const& policy) { typedef typename geometry::ring_type::type ring_type; range_unique::apply(exterior_ring(polygon), policy); typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { range_unique::apply(*it, policy); } } }; }} // namespace detail::unique #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry, typename Tag = typename tag::type > struct unique { template static inline void apply(Geometry&, ComparePolicy const& ) {} }; template struct unique : detail::unique::range_unique {}; template struct unique : detail::unique::range_unique {}; template struct unique : detail::unique::polygon_unique {}; } // namespace dispatch #endif /*! \brief \brief_calc{minimal set} \ingroup unique \details \details_calc{unique,minimal set (where duplicate consecutive points are removed)}. \tparam Geometry \tparam_geometry \param geometry \param_geometry which will be made unique \qbk{[include reference/algorithms/unique.qbk]} */ template inline void unique(Geometry& geometry) { concept::check(); // Default strategy is the default point-comparison policy typedef geometry::equal_to < typename geometry::point_type::type > policy; dispatch::unique::apply(geometry, policy()); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_UNIQUE_HPP within.hpp000444000765000024 2470312161110635 24330 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_WITHIN_HPP #define BOOST_GEOMETRY_ALGORITHMS_WITHIN_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace within { template < typename Point, typename Ring, iterate_direction Direction, closure_selector Closure, typename Strategy > struct point_in_ring { BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategyPolygonal) ); static inline int apply(Point const& point, Ring const& ring, Strategy const& strategy) { if (int(boost::size(ring)) < core_detail::closure::minimum_ring_size::value) { return -1; } typedef typename reversible_view::type rev_view_type; typedef typename closeable_view < rev_view_type const, Closure >::type cl_view_type; typedef typename boost::range_iterator::type iterator_type; rev_view_type rev_view(ring); cl_view_type view(rev_view); typename Strategy::state_type state; iterator_type it = boost::begin(view); iterator_type end = boost::end(view); bool stop = false; for (iterator_type previous = it++; it != end && ! stop; ++previous, ++it) { if (! strategy.apply(point, *previous, *it, state)) { stop = true; } } return strategy.result(state); } }; // Polygon: in exterior ring, and if so, not within interior ring(s) template < typename Point, typename Polygon, iterate_direction Direction, closure_selector Closure, typename Strategy > struct point_in_polygon { BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategyPolygonal) ); static inline int apply(Point const& point, Polygon const& poly, Strategy const& strategy) { int const code = point_in_ring < Point, typename ring_type::type, Direction, Closure, Strategy >::apply(point, exterior_ring(poly), strategy); if (code == 1) { typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { int const interior_code = point_in_ring < Point, typename ring_type::type, Direction, Closure, Strategy >::apply(point, *it, strategy); if (interior_code != -1) { // If 0, return 0 (touch) // If 1 (inside hole) return -1 (outside polygon) // If -1 (outside hole) check other holes if any return -interior_code; } } } return code; } }; }} // namespace detail::within #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Geometry1, typename Geometry2, typename Tag1 = typename tag::type, typename Tag2 = typename tag::type > struct within: not_implemented {}; template struct within { template static inline bool apply(Point const& point, Box const& box, Strategy const& strategy) { return strategy.apply(point, box); } }; template struct within { template static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy) { assert_dimension_equal(); return strategy.apply(box1, box2); } }; template struct within { template static inline bool apply(Point const& point, Ring const& ring, Strategy const& strategy) { return detail::within::point_in_ring < Point, Ring, order_as_direction::value>::value, geometry::closure::value, Strategy >::apply(point, ring, strategy) == 1; } }; template struct within { template static inline bool apply(Point const& point, Polygon const& polygon, Strategy const& strategy) { return detail::within::point_in_polygon < Point, Polygon, order_as_direction::value>::value, geometry::closure::value, Strategy >::apply(point, polygon, strategy) == 1; } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_check12{is completely inside} \ingroup within \details \details_check12{within, is completely inside}. \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry which might be within the second geometry \param geometry2 \param_geometry which might contain the first geometry \return true if geometry1 is completely contained within geometry2, else false \note The default strategy is used for within detection \qbk{[include reference/algorithms/within.qbk]} \qbk{ [heading Example] [within] [within_output] } */ template inline bool within(Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check(); concept::check(); assert_dimension_equal(); typedef typename point_type::type point_type1; typedef typename point_type::type point_type2; typedef typename strategy::within::services::default_strategy < typename tag::type, typename tag::type, typename tag::type, typename tag_cast::type, areal_tag>::type, typename tag_cast < typename cs_tag::type, spherical_tag >::type, typename tag_cast < typename cs_tag::type, spherical_tag >::type, Geometry1, Geometry2 >::type strategy_type; return dispatch::within < Geometry1, Geometry2 >::apply(geometry1, geometry2, strategy_type()); } /*! \brief \brief_check12{is completely inside} \brief_strategy \ingroup within \details \details_check12{within, is completely inside}, \brief_strategy. \details_strategy_reasons \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \param geometry1 \param_geometry which might be within the second geometry \param geometry2 \param_geometry which might contain the first geometry \param strategy strategy to be used \return true if geometry1 is completely contained within geometry2, else false \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/within.qbk]} \qbk{ [heading Available Strategies] \* [link geometry.reference.strategies.strategy_within_winding Winding (coordinate system agnostic)] \* [link geometry.reference.strategies.strategy_within_franklin Franklin (cartesian)] \* [link geometry.reference.strategies.strategy_within_crossings_multiply Crossings Multiply (cartesian)] [heading Example] [within_strategy] [within_strategy_output] } */ template inline bool within(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy) { concept::within::check < typename tag::type, typename tag::type, typename tag_cast::type, areal_tag>::type, Strategy >(); concept::check(); concept::check(); assert_dimension_equal(); return dispatch::within < Geometry1, Geometry2 >::apply(geometry1, geometry2, strategy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_WITHIN_HPP detail000755000765000024 012161110700 23365 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithmsas_range.hpp000444000765000024 541512161110651 26024 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct as_range { static inline typename add_const_if_c::type& get( typename add_const_if_c::type& input) { return input; } }; template struct as_range { static inline typename add_const_if_c::type& get( typename add_const_if_c::type& input) { return exterior_ring(input); } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH // Will probably be replaced by the more generic "view_as", therefore in detail namespace detail { /*! \brief Function getting either the range (ring, linestring) itself or the outer ring (polygon) \details Utility to handle polygon's outer ring as a range \ingroup utility */ template inline Range& as_range(Geometry& input) { return dispatch::as_range < typename tag::type, Geometry, Range, false >::get(input); } /*! \brief Function getting either the range (ring, linestring) itself or the outer ring (polygon), const version \details Utility to handle polygon's outer ring as a range \ingroup utility */ template inline Range const& as_range(Geometry const& input) { return dispatch::as_range < typename tag::type, Geometry, Range, true >::get(input); } } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP assign_box_corners.hpp000444000765000024 566612161110700 30137 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { // Note: this is moved to namespace detail because the names and parameter orders // are not yet 100% clear. /*! \brief Assign the four points of a 2D box \ingroup assign \note The order is crucial. Most logical is LOWER, UPPER and sub-order LEFT, RIGHT so this is how it is implemented. \tparam Box \tparam_box \tparam Point \tparam_point \param box \param_box \param lower_left point being assigned to lower left coordinates of the box \param lower_right point being assigned to lower right coordinates of the box \param upper_left point being assigned to upper left coordinates of the box \param upper_right point being assigned to upper right coordinates of the box \qbk{ [heading Example] [assign_box_corners] [assign_box_corners_output] } */ template inline void assign_box_corners(Box const& box, Point& lower_left, Point& lower_right, Point& upper_left, Point& upper_right) { concept::check(); concept::check(); detail::assign::assign_box_2d_corner (box, lower_left); detail::assign::assign_box_2d_corner (box, lower_right); detail::assign::assign_box_2d_corner (box, upper_left); detail::assign::assign_box_2d_corner (box, upper_right); } template inline void assign_box_corners_oriented(Box const& box, Range& corners) { if (Reverse) { // make counterclockwise ll,lr,ur,ul assign_box_corners(box, corners[0], corners[1], corners[3], corners[2]); } else { // make clockwise ll,ul,ur,lr assign_box_corners(box, corners[0], corners[3], corners[1], corners[2]); } } } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP assign_indexed_point.hpp000444000765000024 527312161110610 30437 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { /*! \brief Assign a box or segment with the value of a point \ingroup assign \tparam Index indicates which box-corner, min_corner (0) or max_corner (1) or which point of segment (0/1) \tparam Point \tparam_point \tparam Geometry \tparam_box_or_segment \param point \param_point \param geometry \param_box_or_segment \qbk{ [heading Example] [assign_point_to_index] [assign_point_to_index_output] } */ template inline void assign_point_to_index(Point const& point, Geometry& geometry) { concept::check(); concept::check(); detail::assign::assign_point_to_index < Geometry, Point, Index, 0, dimension::type::value >::apply(point, geometry); } /*! \brief Assign a point with a point of a box or segment \ingroup assign \tparam Index indicates which box-corner, min_corner (0) or max_corner (1) or which point of segment (0/1) \tparam Geometry \tparam_box_or_segment \tparam Point \tparam_point \param geometry \param_box_or_segment \param point \param_point \qbk{ [heading Example] [assign_point_from_index] [assign_point_from_index_output] } */ template inline void assign_point_from_index(Geometry const& geometry, Point& point) { concept::check(); concept::check(); detail::assign::assign_point_from_index < Geometry, Point, Index, 0, dimension::type::value >::apply(geometry, point); } } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP assign_values.hpp000444000765000024 2722412161110603 27127 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_ASSIGN_VALUES_HPP #define BOOST_GEOMETRY_ALGORITHMS_ASSIGN_VALUES_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace assign { template < typename Box, std::size_t Index, std::size_t Dimension, std::size_t DimensionCount > struct initialize { typedef typename coordinate_type::type coordinate_type; static inline void apply(Box& box, coordinate_type const& value) { geometry::set(box, value); initialize::apply(box, value); } }; template struct initialize { typedef typename coordinate_type::type coordinate_type; static inline void apply(Box&, coordinate_type const& ) {} }; template struct assign_zero_point { static inline void apply(Point& point) { geometry::assign_value(point, 0); } }; template struct assign_inverse_box_or_segment { typedef typename point_type::type point_type; static inline void apply(BoxOrSegment& geometry) { typedef typename coordinate_type::type bound_type; initialize < BoxOrSegment, 0, 0, dimension::type::value >::apply( geometry, boost::numeric::bounds::highest()); initialize < BoxOrSegment, 1, 0, dimension::type::value >::apply( geometry, boost::numeric::bounds::lowest()); } }; template struct assign_zero_box_or_segment { static inline void apply(BoxOrSegment& geometry) { typedef typename coordinate_type::type coordinate_type; initialize < BoxOrSegment, 0, 0, dimension::type::value >::apply(geometry, coordinate_type()); initialize < BoxOrSegment, 1, 0, dimension::type::value >::apply(geometry, coordinate_type()); } }; template < std::size_t Corner1, std::size_t Corner2, typename Box, typename Point > inline void assign_box_2d_corner(Box const& box, Point& point) { // Be sure both are 2-Dimensional assert_dimension(); assert_dimension(); // Copy coordinates typedef typename coordinate_type::type coordinate_type; geometry::set<0>(point, boost::numeric_cast(get(box))); geometry::set<1>(point, boost::numeric_cast(get(box))); } template < typename Geometry, typename Point, std::size_t Index, std::size_t Dimension, std::size_t DimensionCount > struct assign_point_to_index { static inline void apply(Point const& point, Geometry& geometry) { geometry::set(geometry, boost::numeric_cast < typename coordinate_type::type >(geometry::get(point))); assign_point_to_index < Geometry, Point, Index, Dimension + 1, DimensionCount >::apply(point, geometry); } }; template < typename Geometry, typename Point, std::size_t Index, std::size_t DimensionCount > struct assign_point_to_index < Geometry, Point, Index, DimensionCount, DimensionCount > { static inline void apply(Point const& , Geometry& ) { } }; template < typename Geometry, typename Point, std::size_t Index, std::size_t Dimension, std::size_t DimensionCount > struct assign_point_from_index { static inline void apply(Geometry const& geometry, Point& point) { geometry::set( point, boost::numeric_cast < typename coordinate_type::type >(geometry::get(geometry))); assign_point_from_index < Geometry, Point, Index, Dimension + 1, DimensionCount >::apply(geometry, point); } }; template < typename Geometry, typename Point, std::size_t Index, std::size_t DimensionCount > struct assign_point_from_index < Geometry, Point, Index, DimensionCount, DimensionCount > { static inline void apply(Geometry const&, Point&) { } }; template struct assign_2d_box_or_segment { typedef typename coordinate_type::type coordinate_type; // Here we assign 4 coordinates to a box of segment // -> Most logical is: x1,y1,x2,y2 // In case the user reverses x1/x2 or y1/y2, for a box, we could reverse them (THAT IS NOT IMPLEMENTED) template static inline void apply(Geometry& geometry, Type const& x1, Type const& y1, Type const& x2, Type const& y2) { geometry::set<0, 0>(geometry, boost::numeric_cast(x1)); geometry::set<0, 1>(geometry, boost::numeric_cast(y1)); geometry::set<1, 0>(geometry, boost::numeric_cast(x2)); geometry::set<1, 1>(geometry, boost::numeric_cast(y2)); } }; }} // namespace detail::assign #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct assign { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct assign { typedef typename coordinate_type::type coordinate_type; template static inline void apply(Point& point, T const& c1, T const& c2) { set<0>(point, boost::numeric_cast(c1)); set<1>(point, boost::numeric_cast(c2)); } }; template struct assign { typedef typename coordinate_type::type coordinate_type; template static inline void apply(Point& point, T const& c1, T const& c2, T const& c3) { set<0>(point, boost::numeric_cast(c1)); set<1>(point, boost::numeric_cast(c2)); set<2>(point, boost::numeric_cast(c3)); } }; template struct assign : detail::assign::assign_2d_box_or_segment {}; template struct assign : detail::assign::assign_2d_box_or_segment {}; template struct assign_zero {}; template struct assign_zero : detail::assign::assign_zero_point {}; template struct assign_zero : detail::assign::assign_zero_box_or_segment {}; template struct assign_zero : detail::assign::assign_zero_box_or_segment {}; template struct assign_inverse {}; template struct assign_inverse : detail::assign::assign_inverse_box_or_segment {}; template struct assign_inverse : detail::assign::assign_inverse_box_or_segment {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Assign two coordinates to a geometry (usually a 2D point) \ingroup assign \tparam Geometry \tparam_geometry \tparam Type \tparam_numeric to specify the coordinates \param geometry \param_geometry \param c1 \param_x \param c2 \param_y \qbk{distinguish, 2 coordinate values} \qbk{ [heading Example] [assign_2d_point] [assign_2d_point_output] [heading See also] \* [link geometry.reference.algorithms.make.make_2_2_coordinate_values make] } */ template inline void assign_values(Geometry& geometry, Type const& c1, Type const& c2) { concept::check(); dispatch::assign < typename tag::type, Geometry, geometry::dimension::type::value >::apply(geometry, c1, c2); } /*! \brief Assign three values to a geometry (usually a 3D point) \ingroup assign \tparam Geometry \tparam_geometry \tparam Type \tparam_numeric to specify the coordinates \param geometry \param_geometry \param c1 \param_x \param c2 \param_y \param c3 \param_z \qbk{distinguish, 3 coordinate values} \qbk{ [heading Example] [assign_3d_point] [assign_3d_point_output] [heading See also] \* [link geometry.reference.algorithms.make.make_3_3_coordinate_values make] } */ template inline void assign_values(Geometry& geometry, Type const& c1, Type const& c2, Type const& c3) { concept::check(); dispatch::assign < typename tag::type, Geometry, geometry::dimension::type::value >::apply(geometry, c1, c2, c3); } /*! \brief Assign four values to a geometry (usually a box or segment) \ingroup assign \tparam Geometry \tparam_geometry \tparam Type \tparam_numeric to specify the coordinates \param geometry \param_geometry \param c1 First coordinate (usually x1) \param c2 Second coordinate (usually y1) \param c3 Third coordinate (usually x2) \param c4 Fourth coordinate (usually y2) \qbk{distinguish, 4 coordinate values} */ template inline void assign_values(Geometry& geometry, Type const& c1, Type const& c2, Type const& c3, Type const& c4) { concept::check(); dispatch::assign < typename tag::type, Geometry, geometry::dimension::type::value >::apply(geometry, c1, c2, c3, c4); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_ASSIGN_VALUES_HPP calculate_null.hpp000444000765000024 223612161110673 27236 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { struct calculate_null { template static inline ReturnType apply(Geometry const& , Strategy const&) { return ReturnType(); } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP calculate_sum.hpp000444000765000024 346612161110644 27074 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_SUM_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_SUM_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { class calculate_polygon_sum { template static inline ReturnType sum_interior_rings(Rings const& rings, Strategy const& strategy) { ReturnType sum = ReturnType(); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { sum += Policy::apply(*it, strategy); } return sum; } public : template static inline ReturnType apply(Polygon const& poly, Strategy const& strategy) { return Policy::apply(exterior_ring(poly), strategy) + sum_interior_rings(interior_rings(poly), strategy) ; } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_SUM_HPP convert_indexed_to_indexed.hpp000444000765000024 454112161110670 31627 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace conversion { template < typename Source, typename Destination, std::size_t Dimension, std::size_t DimensionCount > struct indexed_to_indexed { static inline void apply(Source const& source, Destination& destination) { typedef typename coordinate_type::type coordinate_type; geometry::set(destination, boost::numeric_cast( geometry::get(source))); geometry::set(destination, boost::numeric_cast( geometry::get(source))); indexed_to_indexed < Source, Destination, Dimension + 1, DimensionCount >::apply(source, destination); } }; template < typename Source, typename Destination, std::size_t DimensionCount > struct indexed_to_indexed { static inline void apply(Source const& , Destination& ) {} }; }} // namespace detail::conversion #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP convert_point_to_point.hpp000444000765000024 442712161110642 31053 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_POINT_TO_POINT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_POINT_TO_POINT_HPP // Note: extracted from "convert.hpp" to avoid circular references convert/append #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace conversion { template struct point_to_point { static inline void apply(Source const& source, Destination& destination) { typedef typename coordinate_type::type coordinate_type; set(destination, boost::numeric_cast(get(source))); point_to_point::apply(source, destination); } }; template struct point_to_point { static inline void apply(Source const& , Destination& ) {} }; template inline void convert_point_to_point(Source const& source, Destination& destination) { point_to_point::value>::apply(source, destination); } }} // namespace detail::conversion #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_POINT_TO_POINT_HPP disjoint.hpp000444000765000024 1345712161110617 26117 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_HPP // Note: contrary to most files, the geometry::detail::disjoint namespace // is partly implemented in a separate file, to avoid circular references // disjoint -> get_turns -> disjoint #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace disjoint { struct disjoint_interrupt_policy { static bool const enabled = true; bool has_intersections; inline disjoint_interrupt_policy() : has_intersections(false) {} template inline bool apply(Range const& range) { // If there is any IP in the range, it is NOT disjoint if (boost::size(range) > 0) { has_intersections = true; return true; } return false; } }; template < typename Point1, typename Point2, std::size_t Dimension, std::size_t DimensionCount > struct point_point { static inline bool apply(Point1 const& p1, Point2 const& p2) { if (! geometry::math::equals(get(p1), get(p2))) { return true; } return point_point < Point1, Point2, Dimension + 1, DimensionCount >::apply(p1, p2); } }; template struct point_point { static inline bool apply(Point1 const& , Point2 const& ) { return false; } }; template < typename Point, typename Box, std::size_t Dimension, std::size_t DimensionCount > struct point_box { static inline bool apply(Point const& point, Box const& box) { if (get(point) < get(box) || get(point) > get(box)) { return true; } return point_box < Point, Box, Dimension + 1, DimensionCount >::apply(point, box); } }; template struct point_box { static inline bool apply(Point const& , Box const& ) { return false; } }; template < typename Box1, typename Box2, std::size_t Dimension, std::size_t DimensionCount > struct box_box { static inline bool apply(Box1 const& box1, Box2 const& box2) { if (get(box1) < get(box2)) { return true; } if (get(box1) > get(box2)) { return true; } return box_box < Box1, Box2, Dimension + 1, DimensionCount >::apply(box1, box2); } }; template struct box_box { static inline bool apply(Box1 const& , Box2 const& ) { return false; } }; template < typename Geometry1, typename Geometry2 > struct reverse_covered_by { static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2) { return ! geometry::covered_by(geometry1, geometry2); } }; /*! \brief Internal utility function to detect of boxes are disjoint \note Is used from other algorithms, declared separately to avoid circular references */ template inline bool disjoint_box_box(Box1 const& box1, Box2 const& box2) { return box_box < Box1, Box2, 0, dimension::type::value >::apply(box1, box2); } /*! \brief Internal utility function to detect of points are disjoint \note To avoid circular references */ template inline bool disjoint_point_point(Point1 const& point1, Point2 const& point2) { return point_point < Point1, Point2, 0, dimension::type::value >::apply(point1, point2); } }} // namespace detail::disjoint #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace equals { /*! \brief Internal utility function to detect of points are disjoint \note To avoid circular references */ template inline bool equals_point_point(Point1 const& point1, Point2 const& point2) { return ! detail::disjoint::disjoint_point_point(point1, point2); } }} // namespace detail::equals #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_HPP for_each_range.hpp000444000765000024 721712161110662 27173 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace for_each { template struct fe_range_range { static inline void apply( typename add_const_if_c::type& range, Actor& actor) { actor.apply(range); } }; template struct fe_range_polygon { static inline void apply( typename add_const_if_c::type& polygon, Actor& actor) { actor.apply(exterior_ring(polygon)); // TODO: If some flag says true, also do the inner rings. // for convex hull, it's not necessary } }; template struct fe_range_box { static inline void apply( typename add_const_if_c::type& box, Actor& actor) { actor.apply(box_view(box)); } }; }} // namespace detail::for_each #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Tag, typename Geometry, typename Actor, bool IsConst > struct for_each_range { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct for_each_range : detail::for_each::fe_range_range {}; template struct for_each_range : detail::for_each::fe_range_range {}; template struct for_each_range : detail::for_each::fe_range_polygon {}; template struct for_each_range : detail::for_each::fe_range_box {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH namespace detail { template inline void for_each_range(Geometry const& geometry, Actor& actor) { dispatch::for_each_range < typename tag::type, Geometry, Actor, true >::apply(geometry, actor); } } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP get_left_turns.hpp000444000765000024 3177112161110660 27315 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { // TODO: move this to /util/ template static inline std::pair ordered_pair(T const& first, T const& second) { return first < second ? std::make_pair(first, second) : std::make_pair(second, first); } template inline void debug_left_turn(AngleInfo const& ai, AngleInfo const& previous) { #ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION std::cout << "Angle: " << (ai.incoming ? "i" : "o") << " " << si(ai.seg_id) << " " << (math::r2d * (ai.angle) ) << " turn: " << ai.turn_index << "[" << ai.operation_index << "]" ; if (ai.turn_index != previous.turn_index || ai.operation_index != previous.operation_index) { std::cout << " diff: " << math::r2d * math::abs(previous.angle - ai.angle); } std::cout << std::endl; #endif } template inline void debug_left_turn(std::string const& caption, AngleInfo const& ai, AngleInfo const& previous, int code = -99, int code2 = -99, int code3 = -99, int code4 = -99) { #ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION std::cout << " " << caption << " turn: " << ai.turn_index << "[" << ai.operation_index << "]" << " " << si(ai.seg_id) << " " << (ai.incoming ? "i" : "o") << " " << (math::r2d * (ai.angle) ) << " turn: " << previous.turn_index << "[" << previous.operation_index << "]" << " " << si(previous.seg_id) << " " << (previous.incoming ? "i" : "o") << " " << (math::r2d * (previous.angle) ) ; if (code != -99) { std::cout << " code: " << code << " , " << code2 << " , " << code3 << " , " << code4; } std::cout << std::endl; #endif } template inline bool include_operation(Operation const& op, segment_identifier const& outgoing_seg_id, segment_identifier const& incoming_seg_id) { return op.seg_id == outgoing_seg_id && op.other_id == incoming_seg_id && (op.operation == detail::overlay::operation_union ||op.operation == detail::overlay::operation_continue) ; } template inline bool process_include(segment_identifier const& outgoing_seg_id, segment_identifier const& incoming_seg_id, int turn_index, Turn& turn, std::set& keep_indices, int priority) { bool result = false; for (int i = 0; i < 2; i++) { if (include_operation(turn.operations[i], outgoing_seg_id, incoming_seg_id)) { turn.operations[i].include_in_occupation_map = true; if (priority > turn.priority) { turn.priority = priority; } keep_indices.insert(turn_index); result = true; } } return result; } template inline bool include_left_turn_of_all( AngleInfo const& outgoing, AngleInfo const& incoming, Turns& turns, TurnSegmentIndices const& turn_segment_indices, std::set& keep_indices, int priority) { segment_identifier const& outgoing_seg_id = turns[outgoing.turn_index].operations[outgoing.operation_index].seg_id; segment_identifier const& incoming_seg_id = turns[incoming.turn_index].operations[incoming.operation_index].seg_id; if (outgoing.turn_index == incoming.turn_index) { return process_include(outgoing_seg_id, incoming_seg_id, outgoing.turn_index, turns[outgoing.turn_index], keep_indices, priority); } bool result = false; std::pair pair = ordered_pair(outgoing_seg_id, incoming_seg_id); typename boost::range_iterator::type it = turn_segment_indices.find(pair); if (it != turn_segment_indices.end()) { for (std::set::const_iterator sit = it->second.begin(); sit != it->second.end(); ++sit) { if (process_include(outgoing_seg_id, incoming_seg_id, *sit, turns[*sit], keep_indices, priority)) { result = true; } } } return result; } template inline bool corresponds(Turn const& turn, segment_identifier const& seg_id) { return turn.operations[Index].operation == detail::overlay::operation_union && turn.operations[Index].seg_id == seg_id; } template inline bool prefer_by_other(Turns const& turns, TurnSegmentIndices const& turn_segment_indices, std::set& indices) { std::map map; for (std::set::const_iterator sit = indices.begin(); sit != indices.end(); ++sit) { map[turns[*sit].operations[0].seg_id]++; map[turns[*sit].operations[1].seg_id]++; } std::set segment_occuring_once; for (std::map::const_iterator mit = map.begin(); mit != map.end();++mit) { if (mit->second == 1) { segment_occuring_once.insert(mit->first); } #ifdef BOOST_GEOMETRY_DEBUG_BUFFER_PREFER std::cout << si(mit->first) << " " << mit->second << std::endl; #endif } if (segment_occuring_once.size() == 2) { // Try to find within all turns a turn with these two segments std::set::const_iterator soo_it = segment_occuring_once.begin(); segment_identifier front = *soo_it; soo_it++; segment_identifier back = *soo_it; std::pair pair = ordered_pair(front, back); typename boost::range_iterator::type it = turn_segment_indices.find(pair); if (it != turn_segment_indices.end()) { // debug_turns_by_indices("Found", it->second); // Check which is the union/continue segment_identifier good; for (std::set::const_iterator sit = it->second.begin(); sit != it->second.end(); ++sit) { if (turns[*sit].operations[0].operation == detail::overlay::operation_union) { good = turns[*sit].operations[0].seg_id; } else if (turns[*sit].operations[1].operation == detail::overlay::operation_union) { good = turns[*sit].operations[1].seg_id; } } #ifdef BOOST_GEOMETRY_DEBUG_BUFFER_PREFER std::cout << "Good: " << si(good) << std::endl; #endif // Find in indexes-to-keep this segment with the union. Discard the other one std::set ok_indices; for (std::set::const_iterator sit = indices.begin(); sit != indices.end(); ++sit) { if (corresponds<0>(turns[*sit], good) || corresponds<1>(turns[*sit], good)) { ok_indices.insert(*sit); } } if (ok_indices.size() > 0 && ok_indices.size() < indices.size()) { indices = ok_indices; std::cout << "^"; return true; } } } return false; } template inline void prefer_by_priority(Turns const& turns, std::set& indices) { // Find max prio int min_prio = 1024, max_prio = 0; for (std::set::const_iterator sit = indices.begin(); sit != indices.end(); ++sit) { if (turns[*sit].priority > max_prio) { max_prio = turns[*sit].priority; } if (turns[*sit].priority < min_prio) { min_prio = turns[*sit].priority; } } if (min_prio == max_prio) { return; } // Only keep indices with high prio std::set ok_indices; for (std::set::const_iterator sit = indices.begin(); sit != indices.end(); ++sit) { if (turns[*sit].priority >= max_prio) { ok_indices.insert(*sit); } } if (ok_indices.size() > 0 && ok_indices.size() < indices.size()) { indices = ok_indices; std::cout << "%"; } } template inline void calculate_left_turns(Angles const& angles, Turns& turns, TurnSegmentIndices const& turn_segment_indices, std::set& keep_indices) { bool debug_indicate_size = false; typedef typename strategy::side::services::default_strategy < typename cs_tag::type >::type side_strategy; std::size_t i = 0; std::size_t n = boost::size(angles); typedef geometry::ever_circling_range_iterator circling_iterator; circling_iterator cit(angles); debug_left_turn(*cit, *cit); for(circling_iterator prev = cit++; i < n; prev = cit++, i++) { debug_left_turn(*cit, *prev); bool const include = ! geometry::math::equals(prev->angle, cit->angle) && ! prev->incoming && cit->incoming; if (include) { // Go back to possibly include more same left outgoing angles: // Because we check on side too we can take a large "epsilon" circling_iterator back = prev - 1; typename AngleInfo::angle_type eps = 0.00001; int b = 1; for(std::size_t d = 0; math::abs(prev->angle - back->angle) < eps && ! back->incoming && d < n; d++) { --back; ++b; } // Same but forward to possibly include more incoming angles int f = 1; circling_iterator forward = cit + 1; for(std::size_t d = 0; math::abs(cit->angle - forward->angle) < eps && forward->incoming && d < n; d++) { ++forward; ++f; } #ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION std::cout << "HANDLE " << b << "/" << f << " ANGLES" << std::endl; #endif for(circling_iterator bit = prev; bit != back; --bit) { int code = side_strategy::apply(bit->direction_point, prev->intersection_point, prev->direction_point); int code2 = side_strategy::apply(prev->direction_point, bit->intersection_point, bit->direction_point); for(circling_iterator fit = cit; fit != forward; ++fit) { int code3 = side_strategy::apply(fit->direction_point, cit->intersection_point, cit->direction_point); int code4 = side_strategy::apply(cit->direction_point, fit->intersection_point, fit->direction_point); int priority = 2; if (code == -1 && code2 == 1) { // This segment is lying right of the other one. // Cannot ignore it (because of robustness, see a.o. #rt_p21 from unit test). // But if we find more we can prefer later by priority // (a.o. necessary for #rt_o2 from unit test) priority = 1; } bool included = include_left_turn_of_all(*bit, *fit, turns, turn_segment_indices, keep_indices, priority); debug_left_turn(included ? "KEEP" : "SKIP", *fit, *bit, code, code2, code3, code4); } } } } if (debug_indicate_size) { std::cout << " size=" << keep_indices.size(); } if (keep_indices.size() >= 2) { prefer_by_other(turns, turn_segment_indices, keep_indices); } if (keep_indices.size() >= 2) { prefer_by_priority(turns, keep_indices); } } } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP has_self_intersections.hpp000444000765000024 726612161110611 31004 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_HAS_SELF_INTERSECTIONS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_HAS_SELF_INTERSECTIONS_HPP #include #include #include #include #include #include #include #ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS # include # include #endif namespace boost { namespace geometry { #if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW) /*! \brief Overlay Invalid Input Exception \ingroup overlay \details The overlay_invalid_input_exception is thrown at invalid input */ class overlay_invalid_input_exception : public geometry::exception { public: inline overlay_invalid_input_exception() {} virtual char const* what() const throw() { return "Boost.Geometry Overlay invalid input exception"; } }; #endif #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template inline bool has_self_intersections(Geometry const& geometry) { typedef typename point_type::type point_type; typedef detail::overlay::turn_info turn_info; std::deque turns; detail::disjoint::disjoint_interrupt_policy policy; geometry::self_turns(geometry, turns, policy); #ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS bool first = true; #endif for(typename std::deque::const_iterator it = boost::begin(turns); it != boost::end(turns); ++it) { turn_info const& info = *it; bool const both_union_turn = info.operations[0].operation == detail::overlay::operation_union && info.operations[1].operation == detail::overlay::operation_union; bool const both_intersection_turn = info.operations[0].operation == detail::overlay::operation_intersection && info.operations[1].operation == detail::overlay::operation_intersection; bool const valid = (both_union_turn || both_intersection_turn) && (info.method == detail::overlay::method_touch || info.method == detail::overlay::method_touch_interior); if (! valid) { #ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS if (first) { std::cout << "turn points: " << std::endl; first = false; } std::cout << method_char(info.method); for (int i = 0; i < 2; i++) { std::cout << " " << operation_char(info.operations[i].operation); } std::cout << " " << geometry::dsv(info.point) << std::endl; #endif #if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW) throw overlay_invalid_input_exception(); #endif } } return false; } }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_HAS_SELF_INTERSECTIONS_HPP not.hpp000444000765000024 265212161110651 25045 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_NOT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_NOT_HPP namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { /*! \brief Structure negating the result of specified policy \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Policy \param geometry1 \param_geometry \param geometry2 \param_geometry \return Negation of the result of the policy */ template struct not_ { static inline bool apply(Geometry1 const &geometry1, Geometry2 const& geometry2) { return ! Policy::apply(geometry1, geometry2); } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_NOT_HPP occupation_info.hpp000444000765000024 2210312161110621 27432 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP #if ! defined(NDEBUG) // #define BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION #endif #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template class relaxed_less { typedef typename geometry::coordinate_type

::type coordinate_type; coordinate_type epsilon; public : inline relaxed_less() { // TODO: adapt for ttmath, and maybe build the map in another way // (e.g. exact constellations of segment-id's), maybe adaptive. epsilon = std::numeric_limits::epsilon() * 100.0; } inline bool operator()(P const& a, P const& b) const { coordinate_type const dx = math::abs(geometry::get<0>(a) - geometry::get<0>(b)); coordinate_type const dy = math::abs(geometry::get<1>(a) - geometry::get<1>(b)); if (dx < epsilon && dy < epsilon) { return false; } if (dx < epsilon) { return geometry::get<1>(a) < geometry::get<1>(b); } return geometry::get<0>(a) < geometry::get<0>(b); } inline bool equals(P const& a, P const& b) const { typedef typename geometry::coordinate_type

::type coordinate_type; coordinate_type const dx = math::abs(geometry::get<0>(a) - geometry::get<0>(b)); coordinate_type const dy = math::abs(geometry::get<1>(a) - geometry::get<1>(b)); return dx < epsilon && dy < epsilon; }; }; template inline T calculate_angle(P1 const& from_point, P2 const& to_point) { typedef P1 vector_type; vector_type v = from_point; geometry::subtract_point(v, to_point); return atan2(geometry::get<1>(v), geometry::get<0>(v)); } template inline Iterator advance_circular(Iterator it, Vector const& vector, segment_identifier& seg_id, bool forward = true) { int const increment = forward ? 1 : -1; if (it == boost::begin(vector) && increment < 0) { it = boost::end(vector); seg_id.segment_index = boost::size(vector); } it += increment; seg_id.segment_index += increment; if (it == boost::end(vector)) { seg_id.segment_index = 0; it = boost::begin(vector); } return it; } template struct angle_info { typedef T angle_type; typedef Point point_type; segment_identifier seg_id; int turn_index; int operation_index; Point intersection_point; Point direction_point; T angle; bool incoming; }; template class occupation_info { typedef std::vector collection_type; struct angle_sort { inline bool operator()(AngleInfo const& left, AngleInfo const& right) const { // In this case we can compare even double using equals // return geometry::math::equals(left.angle, right.angle) return left.angle == right.angle ? int(left.incoming) < int(right.incoming) : left.angle < right.angle ; } }; public : collection_type angles; private : bool m_occupied; bool m_calculated; inline bool is_occupied() { if (boost::size(angles) <= 1) { return false; } std::sort(angles.begin(), angles.end(), angle_sort()); typedef geometry::closing_iterator closing_iterator; closing_iterator vit(angles); closing_iterator end(angles, true); closing_iterator prev = vit++; for( ; vit != end; prev = vit++) { if (! geometry::math::equals(prev->angle, vit->angle) && ! prev->incoming && vit->incoming) { return false; } } return true; } public : inline occupation_info() : m_occupied(false) , m_calculated(false) {} template inline void add(PointC const& map_point, Point1 const& direction_point, Point2 const& intersection_point, int turn_index, int operation_index, segment_identifier const& seg_id, bool incoming) { //std::cout << "-> adding angle " << geometry::wkt(direction_point) << " .. " << geometry::wkt(intersection_point) << " " << int(incoming) << std::endl; if (geometry::equals(direction_point, intersection_point)) { //std::cout << "EQUAL! Skipping" << std::endl; return; } AngleInfo info; info.incoming = incoming; info.angle = calculate_angle(direction_point, map_point); info.seg_id = seg_id; info.turn_index = turn_index; info.operation_index = operation_index; info.intersection_point = intersection_point; info.direction_point = direction_point; angles.push_back(info); m_calculated = false; } inline bool occupied() { if (! m_calculated) { m_occupied = is_occupied(); m_calculated = true; } return m_occupied; } template inline void get_left_turns( Turns& turns, TurnSegmentIndices const& turn_segment_indices, std::set& keep_indices) { std::sort(angles.begin(), angles.end(), angle_sort()); calculate_left_turns(angles, turns, turn_segment_indices, keep_indices); } }; template inline void add_incoming_and_outgoing_angles(Point const& map_point, Point const& intersection_point, Ring const& ring, int turn_index, int operation_index, segment_identifier seg_id, Info& info) { typedef typename boost::range_iterator < Ring const >::type iterator_type; int const n = boost::size(ring); if (seg_id.segment_index >= n || seg_id.segment_index < 0) { return; } segment_identifier real_seg_id = seg_id; iterator_type it = boost::begin(ring) + seg_id.segment_index; // TODO: if we use turn-info ("to", "middle"), we know if to advance without resorting to equals relaxed_less comparator; if (comparator.equals(intersection_point, *it)) { // It should be equal only once. But otherwise we skip it (in "add") it = advance_circular(it, ring, seg_id, false); } info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, true); if (comparator.equals(intersection_point, *it)) { it = advance_circular(it, ring, real_seg_id); } else { // Don't upgrade the ID it = advance_circular(it, ring, seg_id); } for (int defensive_check = 0; comparator.equals(intersection_point, *it) && defensive_check < n; defensive_check++) { it = advance_circular(it, ring, real_seg_id); } info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, false); } // Map in two senses of the word: it is a std::map where the key is a point. // Per point an "occupation_info" record is kept // Used for the buffer (but will also be used for intersections/unions having complex self-tangencies) template class occupation_map { public : typedef std::map > map_type; map_type map; std::set turn_indices; inline OccupationInfo& find_or_insert(Point const& point, Point& mapped_point) { typename map_type::iterator it = map.find(point); if (it == boost::end(map)) { std::pair pair = map.insert(std::make_pair(point, OccupationInfo())); it = pair.first; } mapped_point = it->first; return it->second; } inline bool contains(Point const& point) const { typename map_type::const_iterator it = map.find(point); return it != boost::end(map); } inline bool contains_turn_index(int index) const { return turn_indices.count(index) > 0; } inline void insert_turn_index(int index) { turn_indices.insert(index); } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP partition.hpp000444000765000024 3402312161110631 26271 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP #include #include #include #include namespace boost { namespace geometry { namespace detail { namespace partition { typedef std::vector index_vector_type; template inline void divide_box(Box const& box, Box& lower_box, Box& upper_box) { typedef typename coordinate_type::type ctype; // Divide input box into two parts, e.g. left/right ctype two = 2; ctype mid = (geometry::get(box) + geometry::get(box)) / two; lower_box = box; upper_box = box; geometry::set(lower_box, mid); geometry::set(upper_box, mid); } // Divide collection into three subsets: lower, upper and oversized // (not-fitting) // (lower == left or bottom, upper == right or top) template static inline void divide_into_subsets(Box const& lower_box, Box const& upper_box, InputCollection const& collection, index_vector_type const& input, index_vector_type& lower, index_vector_type& upper, index_vector_type& exceeding) { typedef boost::range_iterator < index_vector_type const >::type index_iterator_type; for(index_iterator_type it = boost::begin(input); it != boost::end(input); ++it) { bool const lower_overlapping = OverlapsPolicy::apply(lower_box, collection[*it]); bool const upper_overlapping = OverlapsPolicy::apply(upper_box, collection[*it]); if (lower_overlapping && upper_overlapping) { exceeding.push_back(*it); } else if (lower_overlapping) { lower.push_back(*it); } else if (upper_overlapping) { upper.push_back(*it); } else { // Is nowhere! Should not occur! BOOST_ASSERT(true); } } } // Match collection with itself template static inline void handle_one(InputCollection const& collection, index_vector_type const& input, Policy& policy) { typedef boost::range_iterator::type index_iterator_type; // Quadratic behaviour at lowest level (lowest quad, or all exceeding) for(index_iterator_type it1 = boost::begin(input); it1 != boost::end(input); ++it1) { index_iterator_type it2 = it1; for(++it2; it2 != boost::end(input); ++it2) { policy.apply(collection[*it1], collection[*it2]); } } } // Match collection 1 with collection 2 template static inline void handle_two( InputCollection const& collection1, index_vector_type const& input1, InputCollection const& collection2, index_vector_type const& input2, Policy& policy) { typedef boost::range_iterator < index_vector_type const >::type index_iterator_type; for(index_iterator_type it1 = boost::begin(input1); it1 != boost::end(input1); ++it1) { for(index_iterator_type it2 = boost::begin(input2); it2 != boost::end(input2); ++it2) { policy.apply(collection1[*it1], collection2[*it2]); } } } template < int Dimension, typename Box, typename OverlapsPolicy, typename VisitBoxPolicy > class partition_one_collection { typedef std::vector index_vector_type; typedef typename coordinate_type::type ctype; typedef partition_one_collection < 1 - Dimension, Box, OverlapsPolicy, VisitBoxPolicy > sub_divide; template static inline void next_level(Box const& box, InputCollection const& collection, index_vector_type const& input, int level, std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) { if (boost::size(input) > 0) { if (std::size_t(boost::size(input)) > min_elements && level < 100) { sub_divide::apply(box, collection, input, level + 1, min_elements, policy, box_policy); } else { handle_one(collection, input, policy); } } } public : template static inline void apply(Box const& box, InputCollection const& collection, index_vector_type const& input, int level, std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) { box_policy.apply(box, level); Box lower_box, upper_box; divide_box(box, lower_box, upper_box); index_vector_type lower, upper, exceeding; divide_into_subsets(lower_box, upper_box, collection, input, lower, upper, exceeding); if (boost::size(exceeding) > 0) { // All what is not fitting a partition should be combined // with each other, and with all which is fitting. handle_one(collection, exceeding, policy); handle_two(collection, exceeding, collection, lower, policy); handle_two(collection, exceeding, collection, upper, policy); } // Recursively call operation both parts next_level(lower_box, collection, lower, level, min_elements, policy, box_policy); next_level(upper_box, collection, upper, level, min_elements, policy, box_policy); } }; template < int Dimension, typename Box, typename OverlapsPolicy, typename VisitBoxPolicy > class partition_two_collections { typedef std::vector index_vector_type; typedef typename coordinate_type::type ctype; typedef partition_two_collections < 1 - Dimension, Box, OverlapsPolicy, VisitBoxPolicy > sub_divide; template static inline void next_level(Box const& box, InputCollection const& collection1, index_vector_type const& input1, InputCollection const& collection2, index_vector_type const& input2, int level, std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) { if (boost::size(input1) > 0 && boost::size(input2) > 0) { if (std::size_t(boost::size(input1)) > min_elements && std::size_t(boost::size(input2)) > min_elements && level < 100) { sub_divide::apply(box, collection1, input1, collection2, input2, level + 1, min_elements, policy, box_policy); } else { box_policy.apply(box, level + 1); handle_two(collection1, input1, collection2, input2, policy); } } } public : template static inline void apply(Box const& box, InputCollection const& collection1, index_vector_type const& input1, InputCollection const& collection2, index_vector_type const& input2, int level, std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) { box_policy.apply(box, level); Box lower_box, upper_box; divide_box(box, lower_box, upper_box); index_vector_type lower1, upper1, exceeding1; index_vector_type lower2, upper2, exceeding2; divide_into_subsets(lower_box, upper_box, collection1, input1, lower1, upper1, exceeding1); divide_into_subsets(lower_box, upper_box, collection2, input2, lower2, upper2, exceeding2); if (boost::size(exceeding1) > 0) { // All exceeding from 1 with 2: handle_two(collection1, exceeding1, collection2, exceeding2, policy); // All exceeding from 1 with lower and upper of 2: handle_two(collection1, exceeding1, collection2, lower2, policy); handle_two(collection1, exceeding1, collection2, upper2, policy); } if (boost::size(exceeding2) > 0) { // All exceeding from 2 with lower and upper of 1: handle_two(collection1, lower1, collection2, exceeding2, policy); handle_two(collection1, upper1, collection2, exceeding2, policy); } next_level(lower_box, collection1, lower1, collection2, lower2, level, min_elements, policy, box_policy); next_level(upper_box, collection1, upper1, collection2, upper2, level, min_elements, policy, box_policy); } }; }} // namespace detail::partition struct visit_no_policy { template static inline void apply(Box const&, int ) {} }; template < typename Box, typename ExpandPolicy, typename OverlapsPolicy, typename VisitBoxPolicy = visit_no_policy > class partition { typedef std::vector index_vector_type; template static inline void expand_to_collection(InputCollection const& collection, Box& total, index_vector_type& index_vector) { std::size_t index = 0; for(typename boost::range_iterator::type it = boost::begin(collection); it != boost::end(collection); ++it, ++index) { ExpandPolicy::apply(total, *it); index_vector.push_back(index); } } public : template static inline void apply(InputCollection const& collection, VisitPolicy& visitor, std::size_t min_elements = 16, VisitBoxPolicy box_visitor = visit_no_policy() ) { if (std::size_t(boost::size(collection)) > min_elements) { index_vector_type index_vector; Box total; assign_inverse(total); expand_to_collection(collection, total, index_vector); detail::partition::partition_one_collection < 0, Box, OverlapsPolicy, VisitBoxPolicy >::apply(total, collection, index_vector, 0, min_elements, visitor, box_visitor); } else { typedef typename boost::range_iterator < InputCollection const >::type iterator_type; for(iterator_type it1 = boost::begin(collection); it1 != boost::end(collection); ++it1) { iterator_type it2 = it1; for(++it2; it2 != boost::end(collection); ++it2) { visitor.apply(*it1, *it2); } } } } template static inline void apply(InputCollection const& collection1, InputCollection const& collection2, VisitPolicy& visitor, std::size_t min_elements = 16, VisitBoxPolicy box_visitor = visit_no_policy() ) { if (std::size_t(boost::size(collection1)) > min_elements && std::size_t(boost::size(collection2)) > min_elements) { index_vector_type index_vector1, index_vector2; Box total; assign_inverse(total); expand_to_collection(collection1, total, index_vector1); expand_to_collection(collection2, total, index_vector2); detail::partition::partition_two_collections < 0, Box, OverlapsPolicy, VisitBoxPolicy >::apply(total, collection1, index_vector1, collection2, index_vector2, 0, min_elements, visitor, box_visitor); } else { typedef typename boost::range_iterator < InputCollection const >::type iterator_type; for(iterator_type it1 = boost::begin(collection1); it1 != boost::end(collection1); ++it1) { for(iterator_type it2 = boost::begin(collection2); it2 != boost::end(collection2); ++it2) { visitor.apply(*it1, *it2); } } } } }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP point_on_border.hpp000444000765000024 1512012161110646 27445 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.Dimension. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace point_on_border { template struct get_point { static inline bool apply(Point& destination, Point const& source, bool) { destination = source; return true; } }; template struct midpoint_helper { template static inline bool apply(Point& p, InputPoint const& p1, InputPoint const& p2) { typename coordinate_type::type const two = 2; set(p, (get(p1) + get(p2)) / two); return midpoint_helper::apply(p, p1, p2); } }; template struct midpoint_helper { template static inline bool apply(Point& , InputPoint const& , InputPoint const& ) { return true; } }; template struct point_on_range { static inline bool apply(Point& point, Range const& range, bool midpoint) { const std::size_t n = boost::size(range); if (midpoint && n > 1) { typedef typename boost::range_iterator < Range const >::type iterator; iterator it = boost::begin(range); iterator prev = it++; while (it != boost::end(range) && detail::equals::equals_point_point(*it, *prev)) { prev = it++; } if (it != boost::end(range)) { return midpoint_helper < Point, 0, dimension::value >::apply(point, *prev, *it); } } if (n > 0) { geometry::detail::conversion::convert_point_to_point(*boost::begin(range), point); return true; } return false; } }; template struct point_on_polygon { static inline bool apply(Point& point, Polygon const& polygon, bool midpoint) { return point_on_range < Point, typename ring_type::type >::apply(point, exterior_ring(polygon), midpoint); } }; template struct point_on_box { static inline bool apply(Point& point, Box const& box, bool midpoint) { if (midpoint) { Point p1, p2; detail::assign::assign_box_2d_corner(box, p1); detail::assign::assign_box_2d_corner(box, p2); midpoint_helper < Point, 0, dimension::value >::apply(point, p1, p2); } else { detail::assign::assign_box_2d_corner(box, point); } return true; } }; }} // namespace detail::point_on_border #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename GeometryTag, typename Point, typename Geometry > struct point_on_border {}; template struct point_on_border : detail::point_on_border::get_point {}; template struct point_on_border : detail::point_on_border::point_on_range {}; template struct point_on_border : detail::point_on_border::point_on_range {}; template struct point_on_border : detail::point_on_border::point_on_polygon {}; template struct point_on_border : detail::point_on_border::point_on_box {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Take point on a border \ingroup overlay \tparam Geometry geometry type. This also defines the type of the output point \param point to assign \param geometry geometry to take point from \param midpoint boolean flag, true if the point should not be a vertex, but some point in between of two vertices \return TRUE if successful, else false. It is only false if polygon/line have no points \note for a polygon, it is always a point on the exterior ring \note for take_midpoint, it is not taken from two consecutive duplicate vertices, (unless there are no other). */ template inline bool point_on_border(Point& point, Geometry const& geometry, bool midpoint = false) { concept::check(); concept::check(); typedef typename point_type::type point_type; return dispatch::point_on_border < typename tag::type, Point, Geometry >::apply(point, geometry, midpoint); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP ring_identifier.hpp000444000765000024 366212161110614 27407 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RING_IDENTIFIER_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RING_IDENTIFIER_HPP namespace boost { namespace geometry { // Ring Identifier. It is currently: source,multi,ring struct ring_identifier { inline ring_identifier() : source_index(-1) , multi_index(-1) , ring_index(-1) {} inline ring_identifier(int src, int mul, int rin) : source_index(src) , multi_index(mul) , ring_index(rin) {} inline bool operator<(ring_identifier const& other) const { return source_index != other.source_index ? source_index < other.source_index : multi_index !=other.multi_index ? multi_index < other.multi_index : ring_index < other.ring_index ; } inline bool operator==(ring_identifier const& other) const { return source_index == other.source_index && ring_index == other.ring_index && multi_index == other.multi_index ; } #if defined(BOOST_GEOMETRY_DEBUG_IDENTIFIER) friend std::ostream& operator<<(std::ostream &os, ring_identifier const& ring_id) { os << "(s:" << ring_id.source_index; if (ring_id.ring_index >= 0) os << ", r:" << ring_id.ring_index; if (ring_id.multi_index >= 0) os << ", m:" << ring_id.multi_index; os << ")"; return os; } #endif int source_index; int multi_index; int ring_index; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RING_IDENTIFIER_HPP throw_on_empty_input.hpp000444000765000024 324312161110625 30537 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP #include #include // BSG 2012-02-06: we use this currently only for distance. // For other scalar results area,length,perimeter it is commented on purpose. // Reason is that for distance there is no other choice. distance of two // empty geometries (or one empty) should NOT return any value. // But for area it is no problem to be 0. // Suppose: area(intersection(a,b)). We (probably) don't want a throw there... // So decided that at least for Boost 1.49 this is commented for // scalar results, except distance. namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template inline void throw_on_empty_input(Geometry const& geometry) { #if ! defined(BOOST_GEOMETRY_EMPTY_INPUT_NO_THROW) if (geometry::num_points(geometry) == 0) { throw empty_input_exception(); } #endif } } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP equals000755000765000024 012161110645 24667 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detailcollect_vectors.hpp000444000765000024 2163212161110645 30753 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/equals// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_COLLECT_VECTORS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_COLLECT_VECTORS_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { // TODO: if Boost.LA of Emil Dotchevski is accepted, adapt this template struct collected_vector { typedef T type; inline collected_vector() {} inline collected_vector(T const& px, T const& py, T const& pdx, T const& pdy) : x(px) , y(py) , dx(pdx) , dy(pdy) , dx_0(T()) , dy_0(T()) {} T x, y; T dx, dy; T dx_0, dy_0; // For sorting inline bool operator<(collected_vector const& other) const { if (math::equals(x, other.x)) { if (math::equals(y, other.y)) { if (math::equals(dx, other.dx)) { return dy < other.dy; } return dx < other.dx; } return y < other.y; } return x < other.x; } inline bool same_direction(collected_vector const& other) const { // For high precision arithmetic, we have to be // more relaxed then using == // Because 2/sqrt( (0,0)<->(2,2) ) == 1/sqrt( (0,0)<->(1,1) ) // is not always true (at least, it is not for ttmath) return math::equals_with_epsilon(dx, other.dx) && math::equals_with_epsilon(dy, other.dy); } // For std::equals inline bool operator==(collected_vector const& other) const { return math::equals(x, other.x) && math::equals(y, other.y) && same_direction(other); } }; #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace collect_vectors { template struct range_collect_vectors { typedef typename boost::range_value::type item_type; typedef typename item_type::type calculation_type; static inline void apply(Collection& collection, Range const& range) { if (boost::size(range) < 2) { return; } typedef typename boost::range_iterator::type iterator; bool first = true; iterator it = boost::begin(range); for (iterator prev = it++; it != boost::end(range); prev = it++) { typename boost::range_value::type v; v.x = get<0>(*prev); v.y = get<1>(*prev); v.dx = get<0>(*it) - v.x; v.dy = get<1>(*it) - v.y; v.dx_0 = v.dx; v.dy_0 = v.dy; // Normalize the vector -> this results in points+direction // and is comparible between geometries calculation_type magnitude = sqrt( boost::numeric_cast(v.dx * v.dx + v.dy * v.dy)); // Avoid non-duplicate points (AND division by zero) if (magnitude > 0) { v.dx /= magnitude; v.dy /= magnitude; // Avoid non-direction changing points if (first || ! v.same_direction(collection.back())) { collection.push_back(v); } first = false; } } // If first one has same direction as last one, remove first one if (boost::size(collection) > 1 && collection.front().same_direction(collection.back())) { collection.erase(collection.begin()); } } }; template struct box_collect_vectors { // Calculate on coordinate type, but if it is integer, // then use double typedef typename boost::range_value::type item_type; typedef typename item_type::type calculation_type; static inline void apply(Collection& collection, Box const& box) { typename point_type::type lower_left, lower_right, upper_left, upper_right; geometry::detail::assign_box_corners(box, lower_left, lower_right, upper_left, upper_right); typedef typename boost::range_value::type item; collection.push_back(item(get<0>(lower_left), get<1>(lower_left), 0, 1)); collection.push_back(item(get<0>(upper_left), get<1>(upper_left), 1, 0)); collection.push_back(item(get<0>(upper_right), get<1>(upper_right), 0, -1)); collection.push_back(item(get<0>(lower_right), get<1>(lower_right), -1, 0)); } }; template struct polygon_collect_vectors { static inline void apply(Collection& collection, Polygon const& polygon) { typedef typename geometry::ring_type::type ring_type; typedef range_collect_vectors per_range; per_range::apply(collection, exterior_ring(polygon)); typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { per_range::apply(collection, *it); } } }; template struct multi_collect_vectors { static inline void apply(Collection& collection, MultiGeometry const& multi) { for (typename boost::range_iterator::type it = boost::begin(multi); it != boost::end(multi); ++it) { SinglePolicy::apply(collection, *it); } } }; }} // namespace detail::collect_vectors #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Tag, typename Collection, typename Geometry > struct collect_vectors { static inline void apply(Collection&, Geometry const&) {} }; template struct collect_vectors : detail::collect_vectors::box_collect_vectors {}; template struct collect_vectors : detail::collect_vectors::range_collect_vectors {}; template struct collect_vectors : detail::collect_vectors::range_collect_vectors {}; template struct collect_vectors : detail::collect_vectors::polygon_collect_vectors {}; template struct collect_vectors : detail::collect_vectors::multi_collect_vectors < MultiPolygon, Collection, detail::collect_vectors::polygon_collect_vectors < typename boost::range_value::type, Collection > > {}; } // namespace dispatch #endif /*! \ingroup collect_vectors \tparam Collection Collection type, should be e.g. std::vector<> \tparam Geometry geometry type \param collection the collection of vectors \param geometry the geometry to make collect_vectors */ template inline void collect_vectors(Collection& collection, Geometry const& geometry) { concept::check(); dispatch::collect_vectors < typename tag::type, Collection, Geometry >::apply(collection, geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_COLLECT_VECTORS_HPP overlay000755000765000024 012161110700 25046 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detailadd_rings.hpp000444000765000024 1145712161110640 27701 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template < typename GeometryOut, typename Geometry1, typename Geometry2, typename RingCollection > inline void convert_and_add(GeometryOut& result, Geometry1 const& geometry1, Geometry2 const& geometry2, RingCollection const& collection, ring_identifier id, bool reversed, bool append) { typedef typename geometry::tag::type tag1; typedef typename geometry::tag::type tag2; typedef typename geometry::tag::type tag_out; if (id.source_index == 0) { convert_ring::apply(result, get_ring::apply(id, geometry1), append, reversed); } else if (id.source_index == 1) { convert_ring::apply(result, get_ring::apply(id, geometry2), append, reversed); } else if (id.source_index == 2) { convert_ring::apply(result, get_ring::apply(id, collection), append, reversed); } } template < typename GeometryOut, typename SelectionMap, typename Geometry1, typename Geometry2, typename RingCollection, typename OutputIterator > inline OutputIterator add_rings(SelectionMap const& map, Geometry1 const& geometry1, Geometry2 const& geometry2, RingCollection const& collection, OutputIterator out) { typedef typename SelectionMap::const_iterator iterator; typedef typename SelectionMap::mapped_type property_type; typedef typename property_type::area_type area_type; area_type const zero = 0; std::size_t const min_num_points = core_detail::closure::minimum_ring_size < geometry::closure < typename boost::range_value < RingCollection const >::type >::value >::value; for (iterator it = boost::begin(map); it != boost::end(map); ++it) { if (! it->second.discarded && it->second.parent.source_index == -1) { GeometryOut result; convert_and_add(result, geometry1, geometry2, collection, it->first, it->second.reversed, false); // Add children for (typename std::vector::const_iterator child_it = it->second.children.begin(); child_it != it->second.children.end(); ++child_it) { iterator mit = map.find(*child_it); if (mit != map.end() && ! mit->second.discarded) { convert_and_add(result, geometry1, geometry2, collection, *child_it, mit->second.reversed, true); } } // Only add rings if they satisfy minimal requirements. // This cannot be done earlier (during traversal), not // everything is figured out yet (sum of positive/negative rings) if (geometry::num_points(result) >= min_num_points && math::larger(geometry::area(result), zero)) { *out++ = result; } } } return out; } template < typename GeometryOut, typename SelectionMap, typename Geometry, typename RingCollection, typename OutputIterator > inline OutputIterator add_rings(SelectionMap const& map, Geometry const& geometry, RingCollection const& collection, OutputIterator out) { Geometry empty; return add_rings(map, geometry, empty, collection, out); } }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP append_no_duplicates.hpp000444000765000024 265012161110643 32105 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template inline void append_no_duplicates(Range& range, Point const& point, bool force = false) { if (boost::size(range) == 0 || force || ! geometry::detail::equals::equals_point_point(*(boost::end(range)-1), point)) { #ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION std::cout << " add: (" << geometry::get<0>(point) << ", " << geometry::get<1>(point) << ")" << std::endl; #endif geometry::append(range, point); } } }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP assign_parents.hpp000444000765000024 2511512161110675 30773 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ASSIGN_PARENTS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ASSIGN_PARENTS_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template < typename Item, typename Geometry1, typename Geometry2, typename RingCollection > static inline bool within_selected_input(Item const& item2, ring_identifier const& ring_id, Geometry1 const& geometry1, Geometry2 const& geometry2, RingCollection const& collection) { typedef typename geometry::tag::type tag1; typedef typename geometry::tag::type tag2; switch (ring_id.source_index) { case 0 : return geometry::within(item2.point, get_ring::apply(ring_id, geometry1)); break; case 1 : return geometry::within(item2.point, get_ring::apply(ring_id, geometry2)); break; case 2 : return geometry::within(item2.point, get_ring::apply(ring_id, collection)); break; } return false; } template struct ring_info_helper { typedef typename geometry::default_area_result::type area_type; ring_identifier id; area_type real_area; area_type abs_area; model::box envelope; inline ring_info_helper() : real_area(0), abs_area(0) {} inline ring_info_helper(ring_identifier i, area_type a) : id(i), real_area(a), abs_area(geometry::math::abs(a)) {} }; struct ring_info_helper_get_box { template static inline void apply(Box& total, InputItem const& item) { geometry::expand(total, item.envelope); } }; struct ring_info_helper_ovelaps_box { template static inline bool apply(Box const& box, InputItem const& item) { return ! geometry::detail::disjoint::disjoint_box_box(box, item.envelope); } }; template struct assign_visitor { typedef typename RingMap::mapped_type ring_info_type; Geometry1 const& m_geometry1; Geometry2 const& m_geometry2; Collection const& m_collection; RingMap& m_ring_map; bool m_check_for_orientation; inline assign_visitor(Geometry1 const& g1, Geometry2 const& g2, Collection const& c, RingMap& map, bool check) : m_geometry1(g1) , m_geometry2(g2) , m_collection(c) , m_ring_map(map) , m_check_for_orientation(check) {} template inline void apply(Item const& outer, Item const& inner, bool first = true) { if (first && outer.real_area < 0) { // Reverse arguments apply(inner, outer, false); return; } if (math::larger(outer.real_area, 0)) { if (inner.real_area < 0 || m_check_for_orientation) { ring_info_type& inner_in_map = m_ring_map[inner.id]; if (geometry::within(inner_in_map.point, outer.envelope) && within_selected_input(inner_in_map, outer.id, m_geometry1, m_geometry2, m_collection) ) { // Only assign parent if that parent is smaller (or if it is the first) if (inner_in_map.parent.source_index == -1 || outer.abs_area < inner_in_map.parent_area) { inner_in_map.parent = outer.id; inner_in_map.parent_area = outer.abs_area; } } } } } }; template < typename Geometry1, typename Geometry2, typename RingCollection, typename RingMap > inline void assign_parents(Geometry1 const& geometry1, Geometry2 const& geometry2, RingCollection const& collection, RingMap& ring_map, bool check_for_orientation = false) { typedef typename geometry::tag::type tag1; typedef typename geometry::tag::type tag2; typedef typename RingMap::mapped_type ring_info_type; typedef typename ring_info_type::point_type point_type; typedef model::box box_type; typedef typename RingMap::iterator map_iterator_type; { typedef ring_info_helper helper; typedef std::vector vector_type; typedef typename boost::range_iterator::type vector_iterator_type; #ifdef BOOST_GEOMETRY_TIME_OVERLAY boost::timer timer; #endif std::size_t count_total = ring_map.size(); std::size_t count_positive = 0; std::size_t index_positive = 0; // only used if count_positive>0 std::size_t index = 0; // Copy to vector (with new approach this might be obsolete as well, using the map directly) vector_type vector(count_total); for (map_iterator_type it = boost::begin(ring_map); it != boost::end(ring_map); ++it, ++index) { vector[index] = helper(it->first, it->second.get_area()); helper& item = vector[index]; switch(it->first.source_index) { case 0 : geometry::envelope(get_ring::apply(it->first, geometry1), item.envelope); break; case 1 : geometry::envelope(get_ring::apply(it->first, geometry2), item.envelope); break; case 2 : geometry::envelope(get_ring::apply(it->first, collection), item.envelope); break; } if (item.real_area > 0) { count_positive++; index_positive = index; } } #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << " ap: created helper vector: " << timer.elapsed() << std::endl; #endif if (! check_for_orientation) { if (count_positive == count_total) { // Optimization for only positive rings // -> no assignment of parents or reversal necessary, ready here. return; } if (count_positive == 1) { // Optimization for one outer ring // -> assign this as parent to all others (all interior rings) // In unions, this is probably the most occuring case and gives // a dramatic improvement (factor 5 for star_comb testcase) ring_identifier id_of_positive = vector[index_positive].id; ring_info_type& outer = ring_map[id_of_positive]; std::size_t index = 0; for (vector_iterator_type it = boost::begin(vector); it != boost::end(vector); ++it, ++index) { if (index != index_positive) { ring_info_type& inner = ring_map[it->id]; inner.parent = id_of_positive; outer.children.push_back(it->id); } } return; } } assign_visitor < Geometry1, Geometry2, RingCollection, RingMap > visitor(geometry1, geometry2, collection, ring_map, check_for_orientation); geometry::partition < box_type, ring_info_helper_get_box, ring_info_helper_ovelaps_box >::apply(vector, visitor); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << " ap: quadradic loop: " << timer.elapsed() << std::endl; std::cout << " ap: check_for_orientation " << check_for_orientation << std::endl; #endif } if (check_for_orientation) { for (map_iterator_type it = boost::begin(ring_map); it != boost::end(ring_map); ++it) { if (geometry::math::equals(it->second.get_area(), 0)) { it->second.discarded = true; } else if (it->second.parent.source_index >= 0 && it->second.get_area() > 0) { // Discard positive inner ring with parent it->second.discarded = true; it->second.parent.source_index = -1; } else if (it->second.parent.source_index < 0 && it->second.get_area() < 0) { // Reverse negative ring without parent it->second.reversed = true; } } } // Assign childlist for (map_iterator_type it = boost::begin(ring_map); it != boost::end(ring_map); ++it) { if (it->second.parent.source_index >= 0) { ring_map[it->second.parent].children.push_back(it->first); } } } template < typename Geometry, typename RingCollection, typename RingMap > inline void assign_parents(Geometry const& geometry, RingCollection const& collection, RingMap& ring_map, bool check_for_orientation) { // Call it with an empty geometry // (ring_map should be empty for source_id==1) Geometry empty; assign_parents(geometry, empty, collection, ring_map, check_for_orientation); } }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ASSIGN_PARENTS_HPP backtrack_check_si.hpp000444000765000024 1143012161110601 31510 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP #include #include #include #include #include #include #if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_OVERLAY_REPORT_WKT) # include # include #endif namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template inline void clear_visit_info(Turns& turns) { typedef typename boost::range_value::type tp_type; for (typename boost::range_iterator::type it = boost::begin(turns); it != boost::end(turns); ++it) { for (typename boost::range_iterator < typename tp_type::container_type >::type op_it = boost::begin(it->operations); op_it != boost::end(it->operations); ++op_it) { op_it->visited.clear(); } it->discarded = false; } } struct backtrack_state { bool m_good; inline backtrack_state() : m_good(true) {} inline void reset() { m_good = true; } inline bool good() const { return m_good; } }; template < typename Geometry1, typename Geometry2 > class backtrack_check_self_intersections { struct state : public backtrack_state { bool m_checked; inline state() : m_checked() {} }; public : typedef state state_type; template static inline void apply(std::size_t size_at_start, Rings& rings, typename boost::range_value::type& ring, Turns& turns, Operation& operation, std::string const& , Geometry1 const& geometry1, Geometry2 const& geometry2, state_type& state ) { state.m_good = false; // Check self-intersections and throw exception if appropriate if (! state.m_checked) { state.m_checked = true; has_self_intersections(geometry1); has_self_intersections(geometry2); } // Make bad output clean rings.resize(size_at_start); ring.clear(); // Reject this as a starting point operation.visited.set_rejected(); // And clear all visit info clear_visit_info(turns); } }; #ifdef BOOST_GEOMETRY_OVERLAY_REPORT_WKT template < typename Geometry1, typename Geometry2 > class backtrack_debug { public : typedef backtrack_state state_type; template static inline void apply(std::size_t size_at_start, Rings& rings, typename boost::range_value::type& ring, Turns& turns, Operation& operation, std::string const& reason, Geometry1 const& geometry1, Geometry2 const& geometry2, state_type& state ) { std::cout << " REJECT " << reason << std::endl; state.m_good = false; rings.resize(size_at_start); ring.clear(); operation.visited.set_rejected(); clear_visit_info(turns); int c = 0; for (int i = 0; i < turns.size(); i++) { for (int j = 0; j < 2; j++) { if (turns[i].operations[j].visited.rejected()) { c++; } } } std::cout << "BACKTRACK (" << reason << " )" << " " << c << " of " << turns.size() << " rejected" << std::endl; std::cout << geometry::wkt(geometry1) << std::endl << geometry::wkt(geometry2) << std::endl; } }; #endif // BOOST_GEOMETRY_OVERLAY_REPORT_WKT }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP calculate_distance_policy.hpp000444000765000024 337012161110637 33116 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CALCULATE_DISTANCE_POLICY_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CALCULATE_DISTANCE_POLICY_HPP #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { /*! \brief Policy calculating distance \details get_turn_info has an optional policy to get some extra information. This policy calculates the distance (using default distance strategy) */ struct calculate_distance_policy { static bool const include_no_turn = false; static bool const include_degenerate = false; static bool const include_opposite = false; template < typename Info, typename Point1, typename Point2, typename IntersectionInfo, typename DirInfo > static inline void apply(Info& info, Point1 const& p1, Point2 const& p2, IntersectionInfo const&, DirInfo const&) { info.operations[0].enriched.distance = geometry::comparable_distance(info.point, p1); info.operations[1].enriched.distance = geometry::comparable_distance(info.point, p2); } }; }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CALCULATE_DISTANCE_POLICY_HPP check_enrich.hpp000444000765000024 1212112161110612 30340 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CHECK_ENRICH_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CHECK_ENRICH_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template struct meta_turn { int index; Turn const* turn; bool handled[2]; inline meta_turn(int i, Turn const& t) : index(i), turn(&t) { handled[0] = false; handled[1] = false; } }; template inline void display(MetaTurn const& meta_turn, std::string const& reason = "") { #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << meta_turn.index << "\tMethods: " << method_char(meta_turn.turn->method) << " operations: " << operation_char(meta_turn.turn->operations[0].operation) << operation_char(meta_turn.turn->operations[1].operation) << " travels to " << meta_turn.turn->operations[0].enriched.travels_to_ip_index << " and " << meta_turn.turn->operations[1].enriched.travels_to_ip_index //<< " -> " << op_index << " " << reason << std::endl; #endif } template inline void check_detailed(MetaTurns& meta_turns, MetaTurn const& meta_turn, int op_index, int cycle, int start, operation_type for_operation, bool& error) { display(meta_turn); int const ip_index = meta_turn.turn->operations[op_index].enriched.travels_to_ip_index; if (ip_index >= 0) { bool found = false; if (ip_index == start) { display(meta_turns[ip_index], " FINISH"); return; } // check on continuing, or on same-operation-on-same-geometry if (! meta_turns[ip_index].handled[op_index] && (meta_turns[ip_index].turn->operations[op_index].operation == operation_continue || meta_turns[ip_index].turn->operations[op_index].operation == for_operation) ) { meta_turns[ip_index].handled[op_index] = true; check_detailed(meta_turns, meta_turns[ip_index], op_index, cycle, start, for_operation, error); found = true; } // check on other geometry if (! found) { int const other_index = 1 - op_index; if (! meta_turns[ip_index].handled[other_index] && meta_turns[ip_index].turn->operations[other_index].operation == for_operation) { meta_turns[ip_index].handled[other_index] = true; check_detailed(meta_turns, meta_turns[ip_index], other_index, cycle, start, for_operation, error); found = true; } } if (! found) { display(meta_turns[ip_index], " STOP"); error = true; #ifndef BOOST_GEOMETRY_DEBUG_ENRICH //std::cout << " STOP"; #endif } } } template inline bool check_graph(TurnPoints& turn_points, operation_type for_operation) { typedef typename boost::range_value::type turn_point_type; bool error = false; int index = 0; std::vector > meta_turns; for (typename boost::range_iterator::type it = boost::begin(turn_points); it != boost::end(turn_points); ++it, ++index) { meta_turns.push_back(meta_turn(index, *it)); } int cycle = 0; for (typename boost::range_iterator > > ::type it = boost::begin(meta_turns); it != boost::end(meta_turns); ++it) { if (! (it->turn->blocked() || it->turn->is_discarded())) { for (int i = 0 ; i < 2; i++) { if (! it->handled[i] && it->turn->operations[i].operation == for_operation) { #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << "CYCLE " << cycle << std::endl; #endif it->handled[i] = true; check_detailed(meta_turns, *it, i, cycle++, it->index, for_operation, error); #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout <<" END CYCLE " << it->index << std::endl; #endif } } } } return error; } }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CHECK_ENRICH_HPP clip_linestring.hpp000444000765000024 1742612161110674 31145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLIP_LINESTRING_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLIP_LINESTRING_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace intersection { /*! \brief Strategy: line clipping algorithm after Liang Barsky \ingroup overlay \details The Liang-Barsky line clipping algorithm clips a line with a clipping box. It is slightly adapted in the sense that it returns which points are clipped \tparam B input box type of clipping box \tparam P input/output point-type of segments to be clipped \note The algorithm is currently only implemented for 2D Cartesian points \note Though it is implemented in namespace strategy, and theoretically another strategy could be used, it is not (yet) updated to the general strategy concepts, and not (yet) splitted into a file in folder strategies \author Barend Gehrels, and the following recourses - A tutorial: http://www.skytopia.com/project/articles/compsci/clipping.html - a German applet (link broken): http://ls7-www.cs.uni-dortmund.de/students/projectgroups/acit/lineclip.shtml */ template class liang_barsky { private: typedef model::referring_segment segment_type; template inline bool check_edge(T const& p, T const& q, T& t1, T& t2) const { bool visible = true; if(p < 0) { T const r = q / p; if (r > t2) visible = false; else if (r > t1) t1 = r; } else if(p > 0) { T const r = q / p; if (r < t1) visible = false; else if (r < t2) t2 = r; } else { if (q < 0) visible = false; } return visible; } public: inline bool clip_segment(Box const& b, segment_type& s, bool& sp1_clipped, bool& sp2_clipped) const { typedef typename select_coordinate_type::type coordinate_type; coordinate_type t1 = 0; coordinate_type t2 = 1; coordinate_type const dx = get<1, 0>(s) - get<0, 0>(s); coordinate_type const dy = get<1, 1>(s) - get<0, 1>(s); coordinate_type const p1 = -dx; coordinate_type const p2 = dx; coordinate_type const p3 = -dy; coordinate_type const p4 = dy; coordinate_type const q1 = get<0, 0>(s) - get(b); coordinate_type const q2 = get(b) - get<0, 0>(s); coordinate_type const q3 = get<0, 1>(s) - get(b); coordinate_type const q4 = get(b) - get<0, 1>(s); if (check_edge(p1, q1, t1, t2) // left && check_edge(p2, q2, t1, t2) // right && check_edge(p3, q3, t1, t2) // bottom && check_edge(p4, q4, t1, t2)) // top { sp1_clipped = t1 > 0; sp2_clipped = t2 < 1; if (sp2_clipped) { set<1, 0>(s, get<0, 0>(s) + t2 * dx); set<1, 1>(s, get<0, 1>(s) + t2 * dy); } if(sp1_clipped) { set<0, 0>(s, get<0, 0>(s) + t1 * dx); set<0, 1>(s, get<0, 1>(s) + t1 * dy); } return true; } return false; } template inline void apply(Linestring& line_out, OutputIterator out) const { if (!boost::empty(line_out)) { *out = line_out; ++out; geometry::clear(line_out); } } }; }} // namespace strategy::intersection #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace intersection { /*! \brief Clips a linestring with a box \details A linestring is intersected (clipped) by the specified box and the resulting linestring, or pieces of linestrings, are sent to the specified output operator. \tparam OutputLinestring type of the output linestrings \tparam OutputIterator an output iterator which outputs linestrings \tparam Linestring linestring-type, for example a vector of points, matching the output-iterator type, the points should also match the input-iterator type \tparam Box box type \tparam Strategy strategy, a clipping strategy which should implement the methods "clip_segment" and "apply" */ template < typename OutputLinestring, typename OutputIterator, typename Range, typename Box, typename Strategy > OutputIterator clip_range_with_box(Box const& b, Range const& range, OutputIterator out, Strategy const& strategy) { if (boost::begin(range) == boost::end(range)) { return out; } typedef typename point_type::type point_type; OutputLinestring line_out; typedef typename boost::range_iterator::type iterator_type; iterator_type vertex = boost::begin(range); for(iterator_type previous = vertex++; vertex != boost::end(range); ++previous, ++vertex) { point_type p1, p2; geometry::convert(*previous, p1); geometry::convert(*vertex, p2); // Clip the segment. Five situations: // 1. Segment is invisible, finish line if any (shouldn't occur) // 2. Segment is completely visible. Add (p1)-p2 to line // 3. Point 1 is invisible (clipped), point 2 is visible. Start new line from p1-p2... // 4. Point 1 is visible, point 2 is invisible (clipped). End the line with ...p2 // 5. Point 1 and point 2 are both invisible (clipped). Start/finish an independant line p1-p2 // // This results in: // a. if p1 is clipped, start new line // b. if segment is partly or completely visible, add the segment // c. if p2 is clipped, end the line bool c1 = false; bool c2 = false; model::referring_segment s(p1, p2); if (!strategy.clip_segment(b, s, c1, c2)) { strategy.apply(line_out, out); } else { // a. If necessary, finish the line and add a start a new one if (c1) { strategy.apply(line_out, out); } // b. Add p1 only if it is the first point, then add p2 if (boost::empty(line_out)) { detail::overlay::append_no_duplicates(line_out, p1, true); } detail::overlay::append_no_duplicates(line_out, p2); // c. If c2 is clipped, finish the line if (c2) { strategy.apply(line_out, out); } } } // Add last part strategy.apply(line_out, out); return out; } }} // namespace detail::intersection #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLIP_LINESTRING_HPP convert_ring.hpp000444000765000024 600712161110641 30422 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CONVERT_RING_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CONVERT_RING_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template struct convert_ring { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TAG , (types) ); }; template<> struct convert_ring { template static inline void apply(Destination& destination, Source const& source, bool append, bool reverse) { if (! append) { geometry::convert(source, destination); if (reverse) { boost::reverse(destination); } } } }; template<> struct convert_ring { template static inline void apply(Destination& destination, Source const& source, bool append, bool reverse) { if (! append) { geometry::convert(source, exterior_ring(destination)); if (reverse) { boost::reverse(exterior_ring(destination)); } } else { // Avoid adding interior rings which are invalid // because of its number of points: std::size_t const min_num_points = core_detail::closure::minimum_ring_size < geometry::closure::value >::value; if (geometry::num_points(source) >= min_num_points) { interior_rings(destination).resize( interior_rings(destination).size() + 1); geometry::convert(source, interior_rings(destination).back()); if (reverse) { boost::reverse(interior_rings(destination).back()); } } } } }; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CONVERT_RING_HPP copy_segment_point.hpp000444000765000024 2000612161110700 31637 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace copy_segments { template struct copy_segment_point_range { typedef typename closeable_view < Range const, closure::value >::type cview_type; typedef typename reversible_view < cview_type const, Reverse ? iterate_reverse : iterate_forward >::type rview_type; static inline bool apply(Range const& range, SegmentIdentifier const& seg_id, bool second, PointOut& point) { int index = seg_id.segment_index; if (second) { index++; if (index >= int(boost::size(range))) { index = 0; } } // Exception? if (index >= int(boost::size(range))) { return false; } cview_type cview(range); rview_type view(cview); geometry::convert(*(boost::begin(view) + index), point); return true; } }; template struct copy_segment_point_polygon { static inline bool apply(Polygon const& polygon, SegmentIdentifier const& seg_id, bool second, PointOut& point) { // Call ring-version with the right ring return copy_segment_point_range < typename geometry::ring_type::type, Reverse, SegmentIdentifier, PointOut >::apply ( seg_id.ring_index < 0 ? geometry::exterior_ring(polygon) : geometry::interior_rings(polygon)[seg_id.ring_index], seg_id, second, point ); } }; template struct copy_segment_point_box { static inline bool apply(Box const& box, SegmentIdentifier const& seg_id, bool second, PointOut& point) { int index = seg_id.segment_index; if (second) { index++; } boost::array::type, 4> bp; assign_box_corners_oriented(box, bp); point = bp[index % 4]; return true; } }; }} // namespace detail::copy_segments #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Tag, typename GeometryIn, bool Reverse, typename SegmentIdentifier, typename PointOut > struct copy_segment_point { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct copy_segment_point : detail::copy_segments::copy_segment_point_range < LineString, Reverse, SegmentIdentifier, PointOut > {}; template struct copy_segment_point : detail::copy_segments::copy_segment_point_range < Ring, Reverse, SegmentIdentifier, PointOut > {}; template struct copy_segment_point : detail::copy_segments::copy_segment_point_polygon < Polygon, Reverse, SegmentIdentifier, PointOut > {}; template struct copy_segment_point : detail::copy_segments::copy_segment_point_box < Box, Reverse, SegmentIdentifier, PointOut > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Helper function, copies a point from a segment \ingroup overlay */ template inline bool copy_segment_point(Geometry const& geometry, SegmentIdentifier const& seg_id, bool second, PointOut& point_out) { concept::check(); return dispatch::copy_segment_point < typename tag::type, Geometry, Reverse, SegmentIdentifier, PointOut >::apply(geometry, seg_id, second, point_out); } /*! \brief Helper function, to avoid the same construct several times, copies a point, based on a source-index and two geometries \ingroup overlay */ template < bool Reverse1, bool Reverse2, typename Geometry1, typename Geometry2, typename SegmentIdentifier, typename PointOut > inline bool copy_segment_point(Geometry1 const& geometry1, Geometry2 const& geometry2, SegmentIdentifier const& seg_id, bool second, PointOut& point_out) { concept::check(); concept::check(); if (seg_id.source_index == 0) { return dispatch::copy_segment_point < typename tag::type, Geometry1, Reverse1, SegmentIdentifier, PointOut >::apply(geometry1, seg_id, second, point_out); } else if (seg_id.source_index == 1) { return dispatch::copy_segment_point < typename tag::type, Geometry2, Reverse2, SegmentIdentifier, PointOut >::apply(geometry2, seg_id, second, point_out); } // Exception? return false; } /*! \brief Helper function, to avoid the same construct several times, copies a point, based on a source-index and two geometries \ingroup overlay */ template < bool Reverse1, bool Reverse2, typename Geometry1, typename Geometry2, typename SegmentIdentifier, typename PointOut > inline bool copy_segment_points(Geometry1 const& geometry1, Geometry2 const& geometry2, SegmentIdentifier const& seg_id, PointOut& point1, PointOut& point2) { concept::check(); concept::check(); return copy_segment_point(geometry1, geometry2, seg_id, false, point1) && copy_segment_point(geometry1, geometry2, seg_id, true, point2); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP copy_segments.hpp000444000765000024 2070312161110645 30625 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace copy_segments { template < typename Ring, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments_ring { typedef typename closeable_view < Ring const, closure::value >::type cview_type; typedef typename reversible_view < cview_type const, Reverse ? iterate_reverse : iterate_forward >::type rview_type; typedef typename boost::range_iterator::type iterator; typedef geometry::ever_circling_iterator ec_iterator; static inline void apply(Ring const& ring, SegmentIdentifier const& seg_id, int to_index, RangeOut& current_output) { cview_type cview(ring); rview_type view(cview); // The problem: sometimes we want to from "3" to "2" // -> end = "3" -> end == begin // This is not convenient with iterators. // So we use the ever-circling iterator and determine when to step out int const from_index = seg_id.segment_index + 1; // Sanity check BOOST_ASSERT(from_index < int(boost::size(view))); ec_iterator it(boost::begin(view), boost::end(view), boost::begin(view) + from_index); // [2..4] -> 4 - 2 + 1 = 3 -> {2,3,4} -> OK // [4..2],size=6 -> 6 - 4 + 2 + 1 = 5 -> {4,5,0,1,2} -> OK // [1..1], travel the whole ring round typedef typename boost::range_difference::type size_type; size_type const count = from_index <= to_index ? to_index - from_index + 1 : int(boost::size(view)) - from_index + to_index + 1; for (size_type i = 0; i < count; ++i, ++it) { detail::overlay::append_no_duplicates(current_output, *it); } } }; template < typename LineString, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments_linestring { typedef typename boost::range_iterator::type iterator; static inline void apply(LineString const& ls, SegmentIdentifier const& seg_id, int to_index, RangeOut& current_output) { int const from_index = seg_id.segment_index + 1; // Sanity check if (from_index > to_index || from_index < 0 || to_index >= int(boost::size(ls))) { return; } typedef typename boost::range_difference::type size_type; size_type const count = to_index - from_index + 1; typename boost::range_iterator::type it = boost::begin(ls) + from_index; for (size_type i = 0; i < count; ++i, ++it) { detail::overlay::append_no_duplicates(current_output, *it); } } }; template < typename Polygon, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments_polygon { static inline void apply(Polygon const& polygon, SegmentIdentifier const& seg_id, int to_index, RangeOut& current_output) { // Call ring-version with the right ring copy_segments_ring < typename geometry::ring_type::type, Reverse, SegmentIdentifier, RangeOut >::apply ( seg_id.ring_index < 0 ? geometry::exterior_ring(polygon) : geometry::interior_rings(polygon)[seg_id.ring_index], seg_id, to_index, current_output ); } }; template < typename Box, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments_box { static inline void apply(Box const& box, SegmentIdentifier const& seg_id, int to_index, RangeOut& current_output) { int index = seg_id.segment_index + 1; BOOST_ASSERT(index < 5); int const count = index <= to_index ? to_index - index + 1 : 5 - index + to_index + 1; // Create array of points, the fifth one closes it boost::array::type, 5> bp; assign_box_corners_oriented(box, bp); bp[4] = bp[0]; // (possibly cyclic) copy to output // (see comments in ring-version) for (int i = 0; i < count; i++, index++) { detail::overlay::append_no_duplicates(current_output, bp[index % 5]); } } }; }} // namespace detail::copy_segments #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Tag, typename GeometryIn, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template < typename Ring, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments : detail::copy_segments::copy_segments_ring < Ring, Reverse, SegmentIdentifier, RangeOut > {}; template < typename LineString, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments : detail::copy_segments::copy_segments_linestring < LineString, Reverse, SegmentIdentifier, RangeOut > {}; template < typename Polygon, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments : detail::copy_segments::copy_segments_polygon < Polygon, Reverse, SegmentIdentifier, RangeOut > {}; template < typename Box, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments : detail::copy_segments::copy_segments_box < Box, Reverse, SegmentIdentifier, RangeOut > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Copy segments from a geometry, starting with the specified segment (seg_id) until the specified index (to_index) \ingroup overlay */ template < bool Reverse, typename Geometry, typename SegmentIdentifier, typename RangeOut > inline void copy_segments(Geometry const& geometry, SegmentIdentifier const& seg_id, int to_index, RangeOut& range_out) { concept::check(); dispatch::copy_segments < typename tag::type, Geometry, Reverse, SegmentIdentifier, RangeOut >::apply(geometry, seg_id, to_index, range_out); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP debug_turn_info.hpp000444000765000024 373512161110656 31107 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DEBUG_TURN_INFO_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DEBUG_TURN_INFO_HPP #include #include namespace boost { namespace geometry { inline char method_char(detail::overlay::method_type const& method) { using namespace detail::overlay; switch(method) { case method_none : return '-'; case method_disjoint : return 'd'; case method_crosses : return 'i'; case method_touch : return 't'; case method_touch_interior : return 'm'; case method_collinear : return 'c'; case method_equal : return 'e'; case method_error : return '!'; default : return '?'; } } inline char operation_char(detail::overlay::operation_type const& operation) { using namespace detail::overlay; switch(operation) { case operation_none : return '-'; case operation_union : return 'u'; case operation_intersection : return 'i'; case operation_blocked : return 'x'; case operation_continue : return 'c'; case operation_opposite : return 'o'; default : return '?'; } } inline char visited_char(detail::overlay::visit_info const& v) { if (v.rejected()) return 'R'; if (v.started()) return 's'; if (v.visited()) return 'v'; if (v.none()) return '-'; if (v.finished()) return 'f'; return '?'; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DEBUG_TURN_INFO_HPP enrich_intersection_points.hpp000444000765000024 4171012161110601 33371 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP #include #include #include #include #include #ifdef BOOST_GEOMETRY_DEBUG_ENRICH # include # include # include # define BOOST_GEOMETRY_DEBUG_IDENTIFIER #endif #include #include #include #include #include #include #ifdef BOOST_GEOMETRY_DEBUG_ENRICH # include #endif namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { // Wraps "turn_operation" from turn_info.hpp, // giving it extra information template struct indexed_turn_operation { typedef TurnOperation type; int index; int operation_index; bool discarded; TurnOperation subject; inline indexed_turn_operation(int i, int oi, TurnOperation const& s) : index(i) , operation_index(oi) , discarded(false) , subject(s) {} }; template struct remove_discarded { inline bool operator()(IndexedTurnOperation const& operation) const { return operation.discarded; } }; template < typename TurnPoints, typename Indexed, typename Geometry1, typename Geometry2, bool Reverse1, bool Reverse2, typename Strategy > struct sort_on_segment_and_distance { inline sort_on_segment_and_distance(TurnPoints const& turn_points , Geometry1 const& geometry1 , Geometry2 const& geometry2 , Strategy const& strategy , bool* clustered) : m_turn_points(turn_points) , m_geometry1(geometry1) , m_geometry2(geometry2) , m_strategy(strategy) , m_clustered(clustered) { } private : TurnPoints const& m_turn_points; Geometry1 const& m_geometry1; Geometry2 const& m_geometry2; Strategy const& m_strategy; mutable bool* m_clustered; inline bool consider_relative_order(Indexed const& left, Indexed const& right) const { typedef typename geometry::point_type::type point_type; point_type pi, pj, ri, rj, si, sj; geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.seg_id, pi, pj); geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.other_id, ri, rj); geometry::copy_segment_points(m_geometry1, m_geometry2, right.subject.other_id, si, sj); int const order = get_relative_order < point_type >::apply(pi, pj,ri, rj, si, sj); //debug("r/o", order == -1); return order == -1; } public : // Note that left/right do NOT correspond to m_geometry1/m_geometry2 // but to the "indexed_turn_operation" inline bool operator()(Indexed const& left, Indexed const& right) const { segment_identifier const& sl = left.subject.seg_id; segment_identifier const& sr = right.subject.seg_id; if (sl == sr && geometry::math::equals(left.subject.enriched.distance , right.subject.enriched.distance)) { // Both left and right are located on the SAME segment. // First check "real" intersection (crosses) // -> distance zero due to precision, solve it by sorting if (m_turn_points[left.index].method == method_crosses && m_turn_points[right.index].method == method_crosses) { return consider_relative_order(left, right); } // If that is not the case, cluster it later on. // Indicate that this is necessary. *m_clustered = true; return left.index < right.index; } return sl == sr ? left.subject.enriched.distance < right.subject.enriched.distance : sl < sr; } }; template inline void update_discarded(Turns& turn_points, Operations& operations) { // Vice-versa, set discarded to true for discarded operations; // AND set discarded points to true for (typename boost::range_iterator::type it = boost::begin(operations); it != boost::end(operations); ++it) { if (turn_points[it->index].discarded) { it->discarded = true; } else if (it->discarded) { turn_points[it->index].discarded = true; } } } // Sorts IP-s of this ring on segment-identifier, and if on same segment, // on distance. // Then assigns for each IP which is the next IP on this segment, // plus the vertex-index to travel to, plus the next IP // (might be on another segment) template < typename IndexType, bool Reverse1, bool Reverse2, typename Container, typename TurnPoints, typename Geometry1, typename Geometry2, typename Strategy > inline void enrich_sort(Container& operations, TurnPoints& turn_points, operation_type for_operation, Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy) { typedef typename IndexType::type operations_type; bool clustered = false; std::sort(boost::begin(operations), boost::end(operations), sort_on_segment_and_distance < TurnPoints, IndexType, Geometry1, Geometry2, Reverse1, Reverse2, Strategy >(turn_points, geometry1, geometry2, strategy, &clustered)); // DONT'T discard xx / (for union) ix / ii / (for intersection) ux / uu here // It would give way to "lonely" ui turn points, traveling all // the way round. See #105 if (clustered) { typedef typename boost::range_iterator::type nc_iterator; nc_iterator it = boost::begin(operations); nc_iterator begin_cluster = boost::end(operations); for (nc_iterator prev = it++; it != boost::end(operations); prev = it++) { operations_type& prev_op = turn_points[prev->index] .operations[prev->operation_index]; operations_type& op = turn_points[it->index] .operations[it->operation_index]; if (prev_op.seg_id == op.seg_id && (turn_points[prev->index].method != method_crosses || turn_points[it->index].method != method_crosses) && geometry::math::equals(prev_op.enriched.distance, op.enriched.distance)) { if (begin_cluster == boost::end(operations)) { begin_cluster = prev; } } else if (begin_cluster != boost::end(operations)) { handle_cluster(begin_cluster, it, turn_points, for_operation, geometry1, geometry2, strategy); begin_cluster = boost::end(operations); } } if (begin_cluster != boost::end(operations)) { handle_cluster(begin_cluster, it, turn_points, for_operation, geometry1, geometry2, strategy); } } update_discarded(turn_points, operations); } template < typename IndexType, typename Container, typename TurnPoints > inline void enrich_discard(Container& operations, TurnPoints& turn_points) { update_discarded(turn_points, operations); // Then delete discarded operations from vector remove_discarded predicate; operations.erase( std::remove_if(boost::begin(operations), boost::end(operations), predicate), boost::end(operations)); } template < typename IndexType, typename Container, typename TurnPoints, typename Geometry1, typename Geometry2, typename Strategy > inline void enrich_assign(Container& operations, TurnPoints& turn_points, operation_type , Geometry1 const& , Geometry2 const& , Strategy const& ) { typedef typename IndexType::type operations_type; typedef typename boost::range_iterator::type iterator_type; if (operations.size() > 0) { // Assign travel-to-vertex/ip index for each turning point. // Because IP's are circular, PREV starts at the very last one, // being assigned from the first one. // "next ip on same segment" should not be considered circular. bool first = true; iterator_type it = boost::begin(operations); for (iterator_type prev = it + (boost::size(operations) - 1); it != boost::end(operations); prev = it++) { operations_type& prev_op = turn_points[prev->index].operations[prev->operation_index]; operations_type& op = turn_points[it->index].operations[it->operation_index]; prev_op.enriched.travels_to_ip_index = it->index; prev_op.enriched.travels_to_vertex_index = it->subject.seg_id.segment_index; if (! first && prev_op.seg_id.segment_index == op.seg_id.segment_index) { prev_op.enriched.next_ip_index = it->index; } first = false; } } // DEBUG #ifdef BOOST_GEOMETRY_DEBUG_ENRICH { for (iterator_type it = boost::begin(operations); it != boost::end(operations); ++it) { operations_type& op = turn_points[it->index] .operations[it->operation_index]; std::cout << it->index << " meth: " << method_char(turn_points[it->index].method) << " seg: " << op.seg_id << " dst: " << boost::numeric_cast(op.enriched.distance) << " op: " << operation_char(turn_points[it->index].operations[0].operation) << operation_char(turn_points[it->index].operations[1].operation) << " dsc: " << (turn_points[it->index].discarded ? "T" : "F") << " ->vtx " << op.enriched.travels_to_vertex_index << " ->ip " << op.enriched.travels_to_ip_index << " ->nxt ip " << op.enriched.next_ip_index //<< " vis: " << visited_char(op.visited) << std::endl; ; } } #endif // END DEBUG } template inline void create_map(TurnPoints const& turn_points, MappedVector& mapped_vector) { typedef typename boost::range_value::type turn_point_type; typedef typename turn_point_type::container_type container_type; int index = 0; for (typename boost::range_iterator::type it = boost::begin(turn_points); it != boost::end(turn_points); ++it, ++index) { // Add operations on this ring, but skip discarded ones if (! it->discarded) { int op_index = 0; for (typename boost::range_iterator::type op_it = boost::begin(it->operations); op_it != boost::end(it->operations); ++op_it, ++op_index) { // We should NOT skip blocked operations here // because they can be relevant for "the other side" // NOT if (op_it->operation != operation_blocked) ring_identifier ring_id ( op_it->seg_id.source_index, op_it->seg_id.multi_index, op_it->seg_id.ring_index ); mapped_vector[ring_id].push_back ( IndexedType(index, op_index, *op_it) ); } } } } }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL /*! \brief All intersection points are enriched with successor information \ingroup overlay \tparam TurnPoints type of intersection container (e.g. vector of "intersection/turn point"'s) \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Strategy side strategy type \param turn_points container containing intersectionpoints \param for_operation operation_type (union or intersection) \param geometry1 \param_geometry \param geometry2 \param_geometry \param strategy strategy */ template < bool Reverse1, bool Reverse2, typename TurnPoints, typename Geometry1, typename Geometry2, typename Strategy > inline void enrich_intersection_points(TurnPoints& turn_points, detail::overlay::operation_type for_operation, Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy) { typedef typename boost::range_value::type turn_point_type; typedef typename turn_point_type::turn_operation_type turn_operation_type; typedef detail::overlay::indexed_turn_operation < turn_operation_type > indexed_turn_operation; typedef std::map < ring_identifier, std::vector > mapped_vector_type; // DISCARD ALL UU // #76 is the reason that this is necessary... // With uu, at all points there is the risk that rings are being traversed twice or more. // Without uu, all rings having only uu will be untouched and gathered by assemble for (typename boost::range_iterator::type it = boost::begin(turn_points); it != boost::end(turn_points); ++it) { if (it->both(detail::overlay::operation_union)) { it->discarded = true; } } // Create a map of vectors of indexed operation-types to be able // to sort intersection points PER RING mapped_vector_type mapped_vector; detail::overlay::create_map(turn_points, mapped_vector); // No const-iterator; contents of mapped copy is temporary, // and changed by enrich for (typename mapped_vector_type::iterator mit = mapped_vector.begin(); mit != mapped_vector.end(); ++mit) { #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << "ENRICH-sort Ring " << mit->first << std::endl; #endif detail::overlay::enrich_sort(mit->second, turn_points, for_operation, geometry1, geometry2, strategy); } for (typename mapped_vector_type::iterator mit = mapped_vector.begin(); mit != mapped_vector.end(); ++mit) { #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << "ENRICH-discard Ring " << mit->first << std::endl; #endif detail::overlay::enrich_discard(mit->second, turn_points); } for (typename mapped_vector_type::iterator mit = mapped_vector.begin(); mit != mapped_vector.end(); ++mit) { #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << "ENRICH-assign Ring " << mit->first << std::endl; #endif detail::overlay::enrich_assign(mit->second, turn_points, for_operation, geometry1, geometry2, strategy); } #ifdef BOOST_GEOMETRY_DEBUG_ENRICH //detail::overlay::check_graph(turn_points, for_operation); #endif } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP enrichment_info.hpp000444000765000024 420112161110600 31057 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICHMENT_INFO_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICHMENT_INFO_HPP #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { /*! \brief Keeps info to enrich intersection info (per source) \details Class to keep information necessary for traversal phase (a phase of the overlay process). The information is gathered during the enrichment phase */ template struct enrichment_info { typedef typename strategy::distance::services::return_type < typename strategy::distance::services::comparable_type < typename strategy::distance::services::default_strategy < point_tag, P >::type >::type >::type distance_type; inline enrichment_info() : travels_to_vertex_index(-1) , travels_to_ip_index(-1) , next_ip_index(-1) , distance(distance_type()) {} // vertex to which is free travel after this IP, // so from "segment_index+1" to "travels_to_vertex_index", without IP-s, // can be -1 int travels_to_vertex_index; // same but now IP index, so "next IP index" but not on THIS segment int travels_to_ip_index; // index of next IP on this segment, -1 if there is no one int next_ip_index; distance_type distance; // distance-measurement from segment.first to IP }; }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICHMENT_INFO_HPP follow.hpp000444000765000024 3154412161110607 27253 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { namespace following { template static inline bool is_entering(Turn const& /* TODO remove this parameter */, Operation const& op) { // (Blocked means: blocked for polygon/polygon intersection, because // they are reversed. But for polygon/line it is similar to continue) return op.operation == operation_intersection || op.operation == operation_continue || op.operation == operation_blocked ; } template < typename Turn, typename Operation, typename LineString, typename Polygon > static inline bool last_covered_by(Turn const& turn, Operation const& op, LineString const& linestring, Polygon const& polygon) { // Check any point between the this one and the first IP typedef typename geometry::point_type::type point_type; point_type point_in_between; detail::point_on_border::midpoint_helper < point_type, 0, dimension::value >::apply(point_in_between, linestring[op.seg_id.segment_index], turn.point); return geometry::covered_by(point_in_between, polygon); } template < typename Turn, typename Operation, typename LineString, typename Polygon > static inline bool is_leaving(Turn const& turn, Operation const& op, bool entered, bool first, LineString const& linestring, Polygon const& polygon) { if (op.operation == operation_union) { return entered || turn.method == method_crosses || (first && last_covered_by(turn, op, linestring, polygon)) ; } return false; } template < typename Turn, typename Operation, typename LineString, typename Polygon > static inline bool is_staying_inside(Turn const& turn, Operation const& op, bool entered, bool first, LineString const& linestring, Polygon const& polygon) { if (turn.method == method_crosses) { // The normal case, this is completely covered with entering/leaving // so stay out of this time consuming "covered_by" return false; } if (is_entering(turn, op)) { return entered || (first && last_covered_by(turn, op, linestring, polygon)); } return false; } template < typename Turn, typename Operation, typename Linestring, typename Polygon > static inline bool was_entered(Turn const& turn, Operation const& op, bool first, Linestring const& linestring, Polygon const& polygon) { if (first && (turn.method == method_collinear || turn.method == method_equal)) { return last_covered_by(turn, op, linestring, polygon); } return false; } // Template specialization structure to call the right actions for the right type template struct action_selector { // If you get here the overlay type is not intersection or difference // BOOST_MPL_ASSERT(false); }; // Specialization for intersection, containing the implementation template<> struct action_selector { template < typename OutputIterator, typename LineStringOut, typename LineString, typename Point, typename Operation > static inline void enter(LineStringOut& current_piece, LineString const& , segment_identifier& segment_id, int , Point const& point, Operation const& operation, OutputIterator& ) { // On enter, append the intersection point and remember starting point detail::overlay::append_no_duplicates(current_piece, point); segment_id = operation.seg_id; } template < typename OutputIterator, typename LineStringOut, typename LineString, typename Point, typename Operation > static inline void leave(LineStringOut& current_piece, LineString const& linestring, segment_identifier& segment_id, int index, Point const& point, Operation const& , OutputIterator& out) { // On leave, copy all segments from starting point, append the intersection point // and add the output piece geometry::copy_segments(linestring, segment_id, index, current_piece); detail::overlay::append_no_duplicates(current_piece, point); if (current_piece.size() > 1) { *out++ = current_piece; } current_piece.clear(); } static inline bool is_entered(bool entered) { return entered; } template static inline bool included(Point const& point, Geometry const& geometry) { return geometry::covered_by(point, geometry); } }; // Specialization for difference, which reverses these actions template<> struct action_selector { typedef action_selector normal_action; template < typename OutputIterator, typename LineStringOut, typename LineString, typename Point, typename Operation > static inline void enter(LineStringOut& current_piece, LineString const& linestring, segment_identifier& segment_id, int index, Point const& point, Operation const& operation, OutputIterator& out) { normal_action::leave(current_piece, linestring, segment_id, index, point, operation, out); } template < typename OutputIterator, typename LineStringOut, typename LineString, typename Point, typename Operation > static inline void leave(LineStringOut& current_piece, LineString const& linestring, segment_identifier& segment_id, int index, Point const& point, Operation const& operation, OutputIterator& out) { normal_action::enter(current_piece, linestring, segment_id, index, point, operation, out); } static inline bool is_entered(bool entered) { return ! normal_action::is_entered(entered); } template static inline bool included(Point const& point, Geometry const& geometry) { return ! normal_action::included(point, geometry); } }; } /*! \brief Follows a linestring from intersection point to intersection point, outputting which is inside, or outside, a ring or polygon \ingroup overlay */ template < typename LineStringOut, typename LineString, typename Polygon, overlay_type OverlayType > class follow { template struct sort_on_segment { // In case of turn point at the same location, we want to have continue/blocked LAST // because that should be followed (intersection) or skipped (difference). inline int operation_order(Turn const& turn) const { operation_type const& operation = turn.operations[0].operation; switch(operation) { case operation_opposite : return 0; case operation_none : return 0; case operation_union : return 1; case operation_intersection : return 2; case operation_blocked : return 3; case operation_continue : return 4; } return -1; }; inline bool use_operation(Turn const& left, Turn const& right) const { // If they are the same, OK. return operation_order(left) < operation_order(right); } inline bool use_distance(Turn const& left, Turn const& right) const { return geometry::math::equals(left.operations[0].enriched.distance, right.operations[0].enriched.distance) ? use_operation(left, right) : left.operations[0].enriched.distance < right.operations[0].enriched.distance ; } inline bool operator()(Turn const& left, Turn const& right) const { segment_identifier const& sl = left.operations[0].seg_id; segment_identifier const& sr = right.operations[0].seg_id; return sl == sr ? use_distance(left, right) : sl < sr ; } }; public : template static inline bool included(Point const& point, Geometry const& geometry) { return following::action_selector::included(point, geometry); } template static inline OutputIterator apply(LineString const& linestring, Polygon const& polygon, detail::overlay::operation_type , // TODO: this parameter might be redundant Turns& turns, OutputIterator out) { typedef typename boost::range_iterator::type turn_iterator; typedef typename boost::range_value::type turn_type; typedef typename boost::range_iterator < typename turn_type::container_type >::type turn_operation_iterator_type; typedef following::action_selector action; // Sort intersection points on segments-along-linestring, and distance // (like in enrich is done for poly/poly) std::sort(boost::begin(turns), boost::end(turns), sort_on_segment()); LineStringOut current_piece; geometry::segment_identifier current_segment_id(0, -1, -1, -1); // Iterate through all intersection points (they are ordered along the line) bool entered = false; bool first = true; for (turn_iterator it = boost::begin(turns); it != boost::end(turns); ++it) { turn_operation_iterator_type iit = boost::begin(it->operations); if (following::was_entered(*it, *iit, first, linestring, polygon)) { debug_traverse(*it, *iit, "-> Was entered"); entered = true; } if (following::is_staying_inside(*it, *iit, entered, first, linestring, polygon)) { debug_traverse(*it, *iit, "-> Staying inside"); entered = true; } else if (following::is_entering(*it, *iit)) { debug_traverse(*it, *iit, "-> Entering"); entered = true; action::enter(current_piece, linestring, current_segment_id, iit->seg_id.segment_index, it->point, *iit, out); } else if (following::is_leaving(*it, *iit, entered, first, linestring, polygon)) { debug_traverse(*it, *iit, "-> Leaving"); entered = false; action::leave(current_piece, linestring, current_segment_id, iit->seg_id.segment_index, it->point, *iit, out); } first = false; } if (action::is_entered(entered)) { geometry::copy_segments(linestring, current_segment_id, boost::size(linestring) - 1, current_piece); } // Output the last one, if applicable if (current_piece.size() > 1) { *out++ = current_piece; } return out; } }; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP get_intersection_points.hpp000444000765000024 1033112161110651 32700 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace get_intersection_points { template < typename Point1, typename Point2, typename TurnInfo > struct get_turn_without_info { typedef strategy_intersection < typename cs_tag::type, Point1, Point2, typename TurnInfo::point_type > si; typedef typename si::segment_intersection_strategy_type strategy; template static inline OutputIterator apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, Point2 const& qi, Point2 const& qj, Point2 const& qk, TurnInfo const& , OutputIterator out) { typedef model::referring_segment segment_type1; typedef model::referring_segment segment_type2; segment_type1 p1(pi, pj), p2(pj, pk); segment_type2 q1(qi, qj), q2(qj, qk); // typename strategy::return_type result = strategy::apply(p1, q1); for (std::size_t i = 0; i < result.template get<0>().count; i++) { TurnInfo tp; geometry::convert(result.template get<0>().intersections[i], tp.point); *out++ = tp; } return out; } }; }} // namespace detail::get_intersection_points #endif // DOXYGEN_NO_DETAIL template < typename Geometry1, typename Geometry2, typename Turns > inline void get_intersection_points(Geometry1 const& geometry1, Geometry2 const& geometry2, Turns& turns) { concept::check_concepts_and_equal_dimensions(); typedef detail::get_intersection_points::get_turn_without_info < typename point_type::type, typename point_type::type, typename boost::range_value::type > TurnPolicy; typedef typename strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, typename boost::range_value::type >::segment_intersection_strategy_type segment_intersection_strategy_type; detail::get_turns::no_interrupt_policy interrupt_policy; boost::mpl::if_c < reverse_dispatch::type::value, dispatch::get_turns_reversed < typename tag::type, typename tag::type, Geometry1, Geometry2, false, false, Turns, TurnPolicy, //segment_intersection_strategy_type, detail::get_turns::no_interrupt_policy >, dispatch::get_turns < typename tag::type, typename tag::type, Geometry1, Geometry2, false, false, Turns, TurnPolicy, //segment_intersection_strategy_type, detail::get_turns::no_interrupt_policy > >::type::apply( 0, geometry1, 1, geometry2, turns, interrupt_policy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP get_relative_order.hpp000444000765000024 624612161110613 31574 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RELATIVE_ORDER_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RELATIVE_ORDER_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { /*! \brief Get relative order \details Can indicate which of two segments R and S, both crossing a common segment P, comes first. If the two segments cross P very close (e.g. in a spike), the distance between the intersection points can be zero, but we still need to know which comes first. Therefore, it is useful that using sides we are able to discover this. */ template struct get_relative_order { typedef strategy_intersection < typename cs_tag::type, Point1, Point1, Point1 > si; typedef typename si::side_strategy_type strategy; template static inline int value_via_product(Point const& ti, Point const& tj, Point const& ui, Point const& uj, int factor) { int const side_ti_u = strategy::apply(ti, tj, ui); int const side_tj_u = strategy::apply(ti, tj, uj); #ifdef BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER std::cout << (factor == 1 ? " r//s " : " s//r ") << side_ti_u << " / " << side_tj_u; #endif return side_ti_u * side_tj_u >= 0 ? factor * (side_ti_u != 0 ? side_ti_u : side_tj_u) : 0; } static inline int apply( Point1 const& pi, Point1 const& pj, Point1 const& ri, Point1 const& rj, Point1 const& si, Point1 const& sj) { int const side_ri_p = strategy::apply(pi, pj, ri); int const side_si_p = strategy::apply(pi, pj, si); #ifdef BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER int const side_rj_p = strategy::apply(pi, pj, rj); int const side_sj_p = strategy::apply(pi, pj, sj); std::cout << "r//p: " << side_ri_p << " / " << side_rj_p; std::cout << " s//p: " << side_si_p << " / " << side_sj_p; #endif int value = value_via_product(si, sj, ri, rj, 1); if (value == 0) { value = value_via_product(ri, rj, si, sj, -1); } int const order = side_ri_p * side_ri_p * side_si_p * value; #ifdef BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER std::cout << " o: " << order << std::endl << std::endl; #endif return order; } }; }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RELATIVE_ORDER_HPP get_ring.hpp000444000765000024 456512161110654 27534 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template struct get_ring {}; // A container of rings (multi-ring but that does not exist) // gets the "void" tag and is dispatched here. template<> struct get_ring { template static inline typename boost::range_value::type const& apply(ring_identifier const& id, Container const& container) { return container[id.multi_index]; } }; template<> struct get_ring { template static inline Ring const& apply(ring_identifier const& , Ring const& ring) { return ring; } }; template<> struct get_ring { template static inline Box const& apply(ring_identifier const& , Box const& box) { return box; } }; template<> struct get_ring { template static inline typename ring_return_type::type const apply( ring_identifier const& id, Polygon const& polygon) { BOOST_ASSERT ( id.ring_index >= -1 && id.ring_index < int(boost::size(interior_rings(polygon))) ); return id.ring_index < 0 ? exterior_ring(polygon) : interior_rings(polygon)[id.ring_index]; } }; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP get_turn_info.hpp000444000765000024 11065512161110642 30633 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW) class turn_info_exception : public geometry::exception { std::string message; public: // NOTE: "char" will be replaced by enum in future version inline turn_info_exception(char const method) { message = "Boost.Geometry Turn exception: "; message += method; } virtual ~turn_info_exception() throw() {} virtual char const* what() const throw() { return message.c_str(); } }; #endif #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { struct base_turn_handler { // Returns true if both sides are opposite static inline bool opposite(int side1, int side2) { // We cannot state side1 == -side2, because 0 == -0 // So either side1*side2==-1 or side1==-side2 && side1 != 0 return side1 * side2 == -1; } // Same side of a segment (not being 0) static inline bool same(int side1, int side2) { return side1 * side2 == 1; } // Both continue template static inline void both(TurnInfo& ti, operation_type const op) { ti.operations[0].operation = op; ti.operations[1].operation = op; } // If condition, first union/second intersection, else vice versa template static inline void ui_else_iu(bool condition, TurnInfo& ti) { ti.operations[0].operation = condition ? operation_union : operation_intersection; ti.operations[1].operation = condition ? operation_intersection : operation_union; } // If condition, both union, else both intersection template static inline void uu_else_ii(bool condition, TurnInfo& ti) { both(ti, condition ? operation_union : operation_intersection); } }; template < typename TurnInfo, typename SideStrategy > struct touch_interior : public base_turn_handler { // Index: 0, P is the interior, Q is touching and vice versa template < int Index, typename Point1, typename Point2, typename IntersectionInfo, typename DirInfo > static inline void apply( Point1 const& pi, Point1 const& pj, Point1 const& , Point2 const& qi, Point2 const& qj, Point2 const& qk, TurnInfo& ti, IntersectionInfo const& intersection_info, DirInfo const& dir_info) { ti.method = method_touch_interior; geometry::convert(intersection_info.intersections[0], ti.point); // Both segments of q touch segment p somewhere in its interior // 1) We know: if q comes from LEFT or RIGHT // (i.e. dir_info.sides.get() == 1 or -1) // 2) Important is: if q_k goes to LEFT, RIGHT, COLLINEAR // and, if LEFT/COLL, if it is lying LEFT or RIGHT w.r.t. q_i static int const index_p = Index; static int const index_q = 1 - Index; int const side_qi_p = dir_info.sides.template get(); int const side_qk_p = SideStrategy::apply(pi, pj, qk); if (side_qi_p == -side_qk_p) { // Q crosses P from left->right or from right->left (test "ML1") // Union: folow P (left->right) or Q (right->left) // Intersection: other turn int index = side_qk_p == -1 ? index_p : index_q; ti.operations[index].operation = operation_union; ti.operations[1 - index].operation = operation_intersection; return; } int const side_qk_q = SideStrategy::apply(qi, qj, qk); if (side_qi_p == -1 && side_qk_p == -1 && side_qk_q == 1) { // Q turns left on the right side of P (test "MR3") // Both directions for "intersection" both(ti, operation_intersection); } else if (side_qi_p == 1 && side_qk_p == 1 && side_qk_q == -1) { // Q turns right on the left side of P (test "ML3") // Union: take both operation // Intersection: skip both(ti, operation_union); } else if (side_qi_p == side_qk_p && side_qi_p == side_qk_q) { // Q turns left on the left side of P (test "ML2") // or Q turns right on the right side of P (test "MR2") // Union: take left turn (Q if Q turns left, P if Q turns right) // Intersection: other turn int index = side_qk_q == 1 ? index_q : index_p; ti.operations[index].operation = operation_union; ti.operations[1 - index].operation = operation_intersection; } else if (side_qk_p == 0) { // Q intersects on interior of P and continues collinearly if (side_qk_q == side_qi_p) { // Collinearly in the same direction // (Q comes from left of P and turns left, // OR Q comes from right of P and turns right) // Omit intersection point. // Union: just continue // Intersection: just continue both(ti, operation_continue); } else { // Opposite direction, which is never travelled. // If Q turns left, P continues for intersection // If Q turns right, P continues for union ti.operations[Index].operation = side_qk_q == 1 ? operation_intersection : operation_union; ti.operations[1 - Index].operation = operation_blocked; } } else { // Should not occur! ti.method = method_error; } } }; template < typename TurnInfo, typename SideStrategy > struct touch : public base_turn_handler { static inline bool between(int side1, int side2, int turn) { return side1 == side2 && ! opposite(side1, turn); } /*static inline void block_second(bool block, TurnInfo& ti) { if (block) { ti.operations[1].operation = operation_blocked; } }*/ template < typename Point1, typename Point2, typename IntersectionInfo, typename DirInfo > static inline void apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, Point2 const& qi, Point2 const& qj, Point2 const& qk, TurnInfo& ti, IntersectionInfo const& intersection_info, DirInfo const& dir_info) { ti.method = method_touch; geometry::convert(intersection_info.intersections[0], ti.point); int const side_qi_p1 = dir_info.sides.template get<1, 0>(); int const side_qk_p1 = SideStrategy::apply(pi, pj, qk); // If Qi and Qk are both at same side of Pi-Pj, // or collinear (so: not opposite sides) if (! opposite(side_qi_p1, side_qk_p1)) { int const side_pk_q2 = SideStrategy::apply(qj, qk, pk); int const side_pk_p = SideStrategy::apply(pi, pj, pk); int const side_qk_q = SideStrategy::apply(qi, qj, qk); bool const both_continue = side_pk_p == 0 && side_qk_q == 0; bool const robustness_issue_in_continue = both_continue && side_pk_q2 != 0; bool const q_turns_left = side_qk_q == 1; bool const block_q = side_qk_p1 == 0 && ! same(side_qi_p1, side_qk_q) && ! robustness_issue_in_continue ; // If Pk at same side as Qi/Qk // (the "or" is for collinear case) // or Q is fully collinear && P turns not to left if (side_pk_p == side_qi_p1 || side_pk_p == side_qk_p1 || (side_qi_p1 == 0 && side_qk_p1 == 0 && side_pk_p != -1) ) { // Collinear -> lines join, continue // (#BRL2) if (side_pk_q2 == 0 && ! block_q) { both(ti, operation_continue); return; } int const side_pk_q1 = SideStrategy::apply(qi, qj, pk); // Collinear opposite case -> block P // (#BRL4, #BLR8) if (side_pk_q1 == 0) { ti.operations[0].operation = operation_blocked; // Q turns right -> union (both independent), // Q turns left -> intersection ti.operations[1].operation = block_q ? operation_blocked : q_turns_left ? operation_intersection : operation_union; return; } // Pk between Qi and Qk // (#BRL3, #BRL7) if (between(side_pk_q1, side_pk_q2, side_qk_q)) { ui_else_iu(q_turns_left, ti); if (block_q) { ti.operations[1].operation = operation_blocked; } //block_second(block_q, ti); return; } // Pk between Qk and P, so left of Qk (if Q turns right) and vv // (#BRL1) if (side_pk_q2 == -side_qk_q) { ui_else_iu(! q_turns_left, ti); return; } // // (#BRL5, #BRL9) if (side_pk_q1 == -side_qk_q) { uu_else_ii(! q_turns_left, ti); if (block_q) { ti.operations[1].operation = operation_blocked; } //block_second(block_q, ti); return; } } else { // Pk at other side than Qi/Pk int const side_qk_q = SideStrategy::apply(qi, qj, qk); bool const q_turns_left = side_qk_q == 1; ti.operations[0].operation = q_turns_left ? operation_intersection : operation_union; ti.operations[1].operation = block_q ? operation_blocked : side_qi_p1 == 1 || side_qk_p1 == 1 ? operation_union : operation_intersection; return; } } else { // From left to right or from right to left int const side_pk_p = SideStrategy::apply(pi, pj, pk); bool const right_to_left = side_qk_p1 == 1; // If p turns into direction of qi (1,2) if (side_pk_p == side_qi_p1) { int const side_pk_q1 = SideStrategy::apply(qi, qj, pk); // Collinear opposite case -> block P if (side_pk_q1 == 0) { ti.operations[0].operation = operation_blocked; ti.operations[1].operation = right_to_left ? operation_union : operation_intersection; return; } if (side_pk_q1 == side_qk_p1) { uu_else_ii(right_to_left, ti); return; } } // If p turns into direction of qk (4,5) if (side_pk_p == side_qk_p1) { int const side_pk_q2 = SideStrategy::apply(qj, qk, pk); // Collinear case -> lines join, continue if (side_pk_q2 == 0) { both(ti, operation_continue); return; } if (side_pk_q2 == side_qk_p1) { ui_else_iu(right_to_left, ti); return; } } // otherwise (3) ui_else_iu(! right_to_left, ti); return; } #ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS // Normally a robustness issue. // TODO: more research if still occuring std::cout << "Not yet handled" << std::endl << "pi " << get<0>(pi) << " , " << get<1>(pi) << " pj " << get<0>(pj) << " , " << get<1>(pj) << " pk " << get<0>(pk) << " , " << get<1>(pk) << std::endl << "qi " << get<0>(qi) << " , " << get<1>(qi) << " qj " << get<0>(qj) << " , " << get<1>(qj) << " qk " << get<0>(qk) << " , " << get<1>(qk) << std::endl; #endif } }; template < typename TurnInfo, typename SideStrategy > struct equal : public base_turn_handler { template < typename Point1, typename Point2, typename IntersectionInfo, typename DirInfo > static inline void apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, Point2 const& , Point2 const& qj, Point2 const& qk, TurnInfo& ti, IntersectionInfo const& intersection_info, DirInfo const& ) { ti.method = method_equal; // Copy the SECOND intersection point geometry::convert(intersection_info.intersections[1], ti.point); int const side_pk_q2 = SideStrategy::apply(qj, qk, pk); int const side_pk_p = SideStrategy::apply(pi, pj, pk); int const side_qk_p = SideStrategy::apply(pi, pj, qk); // If pk is collinear with qj-qk, they continue collinearly. // This can be on either side of p1 (== q1), or collinear // The second condition checks if they do not continue // oppositely if (side_pk_q2 == 0 && side_pk_p == side_qk_p) { both(ti, operation_continue); return; } // If they turn to same side (not opposite sides) if (! opposite(side_pk_p, side_qk_p)) { int const side_pk_q2 = SideStrategy::apply(qj, qk, pk); // If pk is left of q2 or collinear: p: union, q: intersection ui_else_iu(side_pk_q2 != -1, ti); } else { // They turn opposite sides. If p turns left (or collinear), // p: union, q: intersection ui_else_iu(side_pk_p != -1, ti); } } }; template < typename TurnInfo, typename AssignPolicy > struct equal_opposite : public base_turn_handler { template < typename Point1, typename Point2, typename OutputIterator, typename IntersectionInfo, typename DirInfo > static inline void apply(Point1 const& pi, Point2 const& qi, /* by value: */ TurnInfo tp, OutputIterator& out, IntersectionInfo const& intersection_info, DirInfo const& dir_info) { // For equal-opposite segments, normally don't do anything. if (AssignPolicy::include_opposite) { tp.method = method_equal; for (int i = 0; i < 2; i++) { tp.operations[i].operation = operation_opposite; } for (unsigned int i = 0; i < intersection_info.count; i++) { geometry::convert(intersection_info.intersections[i], tp.point); AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info); *out++ = tp; } } } }; template < typename TurnInfo, typename SideStrategy > struct collinear : public base_turn_handler { /* arrival P pk//p1 qk//q1 product* case result 1 1 1 CLL1 ui -1 1 -1 CLL2 iu 1 1 1 CLR1 ui -1 -1 1 CLR2 ui 1 -1 -1 CRL1 iu -1 1 -1 CRL2 iu 1 -1 -1 CRR1 iu -1 -1 1 CRR2 ui 1 0 0 CC1 cc -1 0 0 CC2 cc *product = arrival * (pk//p1 or qk//q1) Stated otherwise: - if P arrives: look at turn P - if Q arrives: look at turn Q - if P arrives and P turns left: union for P - if P arrives and P turns right: intersection for P - if Q arrives and Q turns left: union for Q (=intersection for P) - if Q arrives and Q turns right: intersection for Q (=union for P) ROBUSTNESS: p and q are collinear, so you would expect that side qk//p1 == pk//q1. But that is not always the case in near-epsilon ranges. Then decision logic is different. If p arrives, q is further, so the angle qk//p1 is (normally) more precise than pk//p1 */ template < typename Point1, typename Point2, typename IntersectionInfo, typename DirInfo > static inline void apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, Point2 const& qi, Point2 const& qj, Point2 const& qk, TurnInfo& ti, IntersectionInfo const& intersection_info, DirInfo const& dir_info) { ti.method = method_collinear; geometry::convert(intersection_info.intersections[1], ti.point); int const arrival = dir_info.arrival[0]; // Should not be 0, this is checked before BOOST_ASSERT(arrival != 0); int const side_p = SideStrategy::apply(pi, pj, pk); int const side_q = SideStrategy::apply(qi, qj, qk); // If p arrives, use p, else use q int const side_p_or_q = arrival == 1 ? side_p : side_q ; int const side_pk = SideStrategy::apply(qi, qj, pk); int const side_qk = SideStrategy::apply(pi, pj, qk); // See comments above, // resulting in a strange sort of mathematic rule here: // The arrival-info multiplied by the relevant side // delivers a consistent result. int const product = arrival * side_p_or_q; // Robustness: side_p is supposed to be equal to side_pk (because p/q are collinear) // and side_q to side_qk bool const robustness_issue = side_pk != side_p || side_qk != side_q; if (robustness_issue) { handle_robustness(ti, arrival, side_p, side_q, side_pk, side_qk); } else if(product == 0) { both(ti, operation_continue); } else { ui_else_iu(product == 1, ti); } } static inline void handle_robustness(TurnInfo& ti, int arrival, int side_p, int side_q, int side_pk, int side_qk) { // We take the longer one, i.e. if q arrives in p (arrival == -1), // then p exceeds q and we should take p for a union... bool use_p_for_union = arrival == -1; // ... unless one of the sides consistently directs to the other side int const consistent_side_p = side_p == side_pk ? side_p : 0; int const consistent_side_q = side_q == side_qk ? side_q : 0; if (arrival == -1 && (consistent_side_p == -1 || consistent_side_q == 1)) { use_p_for_union = false; } if (arrival == 1 && (consistent_side_p == 1 || consistent_side_q == -1)) { use_p_for_union = true; } //std::cout << "ROBUSTNESS -> Collinear " // << " arr: " << arrival // << " dir: " << side_p << " " << side_q // << " rev: " << side_pk << " " << side_qk // << " cst: " << cside_p << " " << cside_q // << std::boolalpha << " " << use_p_for_union // << std::endl; ui_else_iu(use_p_for_union, ti); } }; template < typename TurnInfo, typename SideStrategy, typename AssignPolicy > struct collinear_opposite : public base_turn_handler { private : /* arrival P arrival Q pk//p1 qk//q1 case result2 result -------------------------------------------------------------- 1 1 1 -1 CLO1 ix xu 1 1 1 0 CLO2 ix (xx) 1 1 1 1 CLO3 ix xi 1 1 0 -1 CCO1 (xx) xu 1 1 0 0 CCO2 (xx) (xx) 1 1 0 1 CCO3 (xx) xi 1 1 -1 -1 CRO1 ux xu 1 1 -1 0 CRO2 ux (xx) 1 1 -1 1 CRO3 ux xi -1 1 -1 CXO1 xu -1 1 0 CXO2 (xx) -1 1 1 CXO3 xi 1 -1 1 CXO1 ix 1 -1 0 CXO2 (xx) 1 -1 -1 CXO3 ux */ template < int Index, typename Point, typename IntersectionInfo > static inline bool set_tp(Point const& ri, Point const& rj, Point const& rk, TurnInfo& tp, IntersectionInfo const& intersection_info) { int const side_rk_r = SideStrategy::apply(ri, rj, rk); operation_type blocked = operation_blocked; switch(side_rk_r) { case 1 : // Turning left on opposite collinear: intersection tp.operations[Index].operation = operation_intersection; break; case -1 : // Turning right on opposite collinear: union tp.operations[Index].operation = operation_union; break; case 0 : // No turn on opposite collinear: block, do not traverse // But this "xx" is usually ignored, it is useless to include // two operations blocked, so the whole point does not need // to be generated. // So return false to indicate nothing is to be done. if (AssignPolicy::include_opposite) { tp.operations[Index].operation = operation_opposite; blocked = operation_opposite; } else { return false; } break; } // The other direction is always blocked when collinear opposite tp.operations[1 - Index].operation = blocked; // If P arrives within Q, set info on P (which is done above, index=0), // this turn-info belongs to the second intersection point, index=1 // (see e.g. figure CLO1) geometry::convert(intersection_info.intersections[1 - Index], tp.point); return true; } public: template < typename Point1, typename Point2, typename OutputIterator, typename IntersectionInfo, typename DirInfo > static inline void apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, Point2 const& qi, Point2 const& qj, Point2 const& qk, // Opposite collinear can deliver 2 intersection points, TurnInfo const& tp_model, OutputIterator& out, IntersectionInfo const& intersection_info, DirInfo const& dir_info) { TurnInfo tp = tp_model; tp.method = method_collinear; // If P arrives within Q, there is a turn dependent on P if (dir_info.arrival[0] == 1 && set_tp<0>(pi, pj, pk, tp, intersection_info)) { AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info); *out++ = tp; } // If Q arrives within P, there is a turn dependent on Q if (dir_info.arrival[1] == 1 && set_tp<1>(qi, qj, qk, tp, intersection_info)) { AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info); *out++ = tp; } if (AssignPolicy::include_opposite) { // Handle cases not yet handled above if ((dir_info.arrival[1] == -1 && dir_info.arrival[0] == 0) || (dir_info.arrival[0] == -1 && dir_info.arrival[1] == 0)) { for (int i = 0; i < 2; i++) { tp.operations[i].operation = operation_opposite; } for (unsigned int i = 0; i < intersection_info.count; i++) { geometry::convert(intersection_info.intersections[i], tp.point); AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info); *out++ = tp; } } } } }; template < typename TurnInfo, typename SideStrategy > struct crosses : public base_turn_handler { template < typename Point1, typename Point2, typename IntersectionInfo, typename DirInfo > static inline void apply( Point1 const& , Point1 const& , Point1 const& , Point2 const& , Point2 const& , Point2 const& , TurnInfo& ti, IntersectionInfo const& intersection_info, DirInfo const& dir_info) { ti.method = method_crosses; geometry::convert(intersection_info.intersections[0], ti.point); // In all casees: // If Q crosses P from left to right // Union: take P // Intersection: take Q // Otherwise: vice versa int const side_qi_p1 = dir_info.sides.template get<1, 0>(); int const index = side_qi_p1 == 1 ? 0 : 1; ti.operations[index].operation = operation_union; ti.operations[1 - index].operation = operation_intersection; } }; template struct only_convert { template static inline void apply(TurnInfo& ti, IntersectionInfo const& intersection_info) { ti.method = method_collinear; geometry::convert(intersection_info.intersections[0], ti.point); ti.operations[0].operation = operation_continue; ti.operations[1].operation = operation_continue; } }; /*! \brief Policy doing nothing \details get_turn_info can have an optional policy to get/assign some extra information. By default it does not, and this class is that default. */ struct assign_null_policy { static bool const include_no_turn = false; static bool const include_degenerate = false; static bool const include_opposite = false; template < typename Info, typename Point1, typename Point2, typename IntersectionInfo, typename DirInfo > static inline void apply(Info& , Point1 const& , Point2 const&, IntersectionInfo const&, DirInfo const&) {} }; /*! \brief Turn information: intersection point, method, and turn information \details Information necessary for traversal phase (a phase of the overlay process). The information is gathered during the get_turns (segment intersection) phase. \tparam Point1 point type of first segment \tparam Point2 point type of second segment \tparam TurnInfo type of class getting intersection and turn info \tparam AssignPolicy policy to assign extra info, e.g. to calculate distance from segment's first points to intersection points. It also defines if a certain class of points (degenerate, non-turns) should be included. */ template < typename Point1, typename Point2, typename TurnInfo, typename AssignPolicy > struct get_turn_info { typedef strategy_intersection < typename cs_tag::type, Point1, Point2, typename TurnInfo::point_type > si; typedef typename si::segment_intersection_strategy_type strategy; // Intersect pi-pj with qi-qj // The points pk and qk are only used do determine more information // about the turn. template static inline OutputIterator apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, Point2 const& qi, Point2 const& qj, Point2 const& qk, TurnInfo const& tp_model, OutputIterator out) { typedef model::referring_segment segment_type1; typedef model::referring_segment segment_type2; segment_type1 p1(pi, pj), p2(pj, pk); segment_type2 q1(qi, qj), q2(qj, qk); typename strategy::return_type result = strategy::apply(p1, q1); char const method = result.template get<1>().how; // Copy, to copy possibly extended fields TurnInfo tp = tp_model; // Select method and apply switch(method) { case 'a' : // collinear, "at" case 'f' : // collinear, "from" case 's' : // starts from the middle if (AssignPolicy::include_no_turn && result.template get<0>().count > 0) { only_convert::apply(tp, result.template get<0>()); AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } break; case 'd' : // disjoint: never do anything break; case 'm' : { typedef touch_interior < TurnInfo, typename si::side_strategy_type > policy; // If Q (1) arrives (1) if (result.template get<1>().arrival[1] == 1) { policy::template apply<0>(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); } else { // Swap p/q policy::template apply<1>(qi, qj, qk, pi, pj, pk, tp, result.template get<0>(), result.template get<1>()); } AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } break; case 'i' : { typedef crosses < TurnInfo, typename si::side_strategy_type > policy; policy::apply(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } break; case 't' : { // Both touch (both arrive there) typedef touch < TurnInfo, typename si::side_strategy_type > policy; policy::apply(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } break; case 'e': { if (! result.template get<1>().opposite) { // Both equal // or collinear-and-ending at intersection point typedef equal < TurnInfo, typename si::side_strategy_type > policy; policy::apply(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } else { equal_opposite < TurnInfo, AssignPolicy >::apply(pi, qi, tp, out, result.template get<0>(), result.template get<1>()); } } break; case 'c' : { // Collinear if (! result.template get<1>().opposite) { if (result.template get<1>().arrival[0] == 0) { // Collinear, but similar thus handled as equal equal < TurnInfo, typename si::side_strategy_type >::apply(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); // override assigned method tp.method = method_collinear; } else { collinear < TurnInfo, typename si::side_strategy_type >::apply(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); } AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } else { collinear_opposite < TurnInfo, typename si::side_strategy_type, AssignPolicy >::apply(pi, pj, pk, qi, qj, qk, tp, out, result.template get<0>(), result.template get<1>()); } } break; case '0' : { // degenerate points if (AssignPolicy::include_degenerate) { only_convert::apply(tp, result.template get<0>()); AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } } break; default : { #if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW) throw turn_info_exception(method); #endif } break; } return out; } }; }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HPP get_turns.hpp000444000765000024 7020612161110674 27765 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP #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 #include #include #include #include #include #include #ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION # include # include #endif namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace get_turns { struct no_interrupt_policy { static bool const enabled = false; template static inline bool apply(Range const&) { return false; } }; template < typename Geometry1, typename Geometry2, bool Reverse1, bool Reverse2, typename Section1, typename Section2, typename Turns, typename TurnPolicy, typename InterruptPolicy > class get_turns_in_sections { typedef typename closeable_view < typename range_type::type const, closure::value >::type cview_type1; typedef typename closeable_view < typename range_type::type const, closure::value >::type cview_type2; typedef typename reversible_view < cview_type1 const, Reverse1 ? iterate_reverse : iterate_forward >::type view_type1; typedef typename reversible_view < cview_type2 const, Reverse2 ? iterate_reverse : iterate_forward >::type view_type2; typedef typename boost::range_iterator < view_type1 const >::type range1_iterator; typedef typename boost::range_iterator < view_type2 const >::type range2_iterator; template static inline bool neighbouring(Section const& section, int index1, int index2) { // About n-2: // (square: range_count=5, indices 0,1,2,3 // -> 0-3 are adjacent, don't check on intersections) // Also tested for open polygons, and/or duplicates // About first condition: will be optimized by compiler (static) // It checks if it is areal (box,ring,(multi)polygon int const n = int(section.range_count); return boost::is_same < typename tag_cast < typename geometry::point_type::type, areal_tag >::type, areal_tag >::value && index1 == 0 && index2 >= n - 2 ; } public : // Returns true if terminated, false if interrupted static inline bool apply( int source_id1, Geometry1 const& geometry1, Section1 const& sec1, int source_id2, Geometry2 const& geometry2, Section2 const& sec2, bool skip_larger, Turns& turns, InterruptPolicy& interrupt_policy) { cview_type1 cview1(range_by_section(geometry1, sec1)); cview_type2 cview2(range_by_section(geometry2, sec2)); view_type1 view1(cview1); view_type2 view2(cview2); range1_iterator begin_range_1 = boost::begin(view1); range1_iterator end_range_1 = boost::end(view1); range2_iterator begin_range_2 = boost::begin(view2); range2_iterator end_range_2 = boost::end(view2); int const dir1 = sec1.directions[0]; int const dir2 = sec2.directions[0]; int index1 = sec1.begin_index; int ndi1 = sec1.non_duplicate_index; bool const same_source = source_id1 == source_id2 && sec1.ring_id.multi_index == sec2.ring_id.multi_index && sec1.ring_id.ring_index == sec2.ring_id.ring_index; range1_iterator prev1, it1, end1; get_start_point_iterator(sec1, view1, prev1, it1, end1, index1, ndi1, dir1, sec2.bounding_box); // We need a circular iterator because it might run through the closing point. // One circle is actually enough but this one is just convenient. ever_circling_iterator next1(begin_range_1, end_range_1, it1, true); next1++; // Walk through section and stop if we exceed the other box // section 2: [--------------] // section 1: |----|---|---|---|---| for (prev1 = it1++, next1++; it1 != end1 && ! exceeding<0>(dir1, *prev1, sec2.bounding_box); ++prev1, ++it1, ++index1, ++next1, ++ndi1) { ever_circling_iterator nd_next1( begin_range_1, end_range_1, next1, true); advance_to_non_duplicate_next(nd_next1, it1, sec1); int index2 = sec2.begin_index; int ndi2 = sec2.non_duplicate_index; range2_iterator prev2, it2, end2; get_start_point_iterator(sec2, view2, prev2, it2, end2, index2, ndi2, dir2, sec1.bounding_box); ever_circling_iterator next2(begin_range_2, end_range_2, it2, true); next2++; for (prev2 = it2++, next2++; it2 != end2 && ! exceeding<0>(dir2, *prev2, sec1.bounding_box); ++prev2, ++it2, ++index2, ++next2, ++ndi2) { bool skip = same_source; if (skip) { // If sources are the same (possibly self-intersecting): // skip if it is a neighbouring segment. // (including first-last segment // and two segments with one or more degenerate/duplicate // (zero-length) segments in between) // Also skip if index1 < index2 to avoid getting all // intersections twice (only do this on same source!) skip = (skip_larger && index1 >= index2) || ndi2 == ndi1 + 1 || neighbouring(sec1, index1, index2) ; } if (! skip) { // Move to the "non duplicate next" ever_circling_iterator nd_next2( begin_range_2, end_range_2, next2, true); advance_to_non_duplicate_next(nd_next2, it2, sec2); typedef typename boost::range_value::type turn_info; typedef typename turn_info::point_type ip; turn_info ti; ti.operations[0].seg_id = segment_identifier(source_id1, sec1.ring_id.multi_index, sec1.ring_id.ring_index, index1), ti.operations[1].seg_id = segment_identifier(source_id2, sec2.ring_id.multi_index, sec2.ring_id.ring_index, index2), ti.operations[0].other_id = ti.operations[1].seg_id; ti.operations[1].other_id = ti.operations[0].seg_id; std::size_t const size_before = boost::size(turns); TurnPolicy::apply(*prev1, *it1, *nd_next1, *prev2, *it2, *nd_next2, ti, std::back_inserter(turns)); if (InterruptPolicy::enabled) { if (interrupt_policy.apply( std::make_pair(boost::begin(turns) + size_before, boost::end(turns)))) { return false; } } } } } return true; } private : typedef typename geometry::point_type::type point1_type; typedef typename geometry::point_type::type point2_type; typedef typename model::referring_segment segment1_type; typedef typename model::referring_segment segment2_type; template static inline bool preceding(int dir, Point const& point, Box const& box) { return (dir == 1 && get(point) < get(box)) || (dir == -1 && get(point) > get(box)); } template static inline bool exceeding(int dir, Point const& point, Box const& box) { return (dir == 1 && get(point) > get(box)) || (dir == -1 && get(point) < get(box)); } template static inline void advance_to_non_duplicate_next(Iterator& next, RangeIterator const& it, Section const& section) { // To see where the next segments bend to, in case of touch/intersections // on end points, we need (in case of degenerate/duplicate points) an extra // iterator which moves to the REAL next point, so non duplicate. // This needs an extra comparison (disjoint). // (Note that within sections, non duplicate points are already asserted, // by the sectionalize process). // So advance to the "non duplicate next" // (the check is defensive, to avoid endless loops) std::size_t check = 0; while(! detail::disjoint::disjoint_point_point(*it, *next) && check++ < section.range_count) { next++; } } // It is NOT possible to have section-iterators here // because of the logistics of "index" (the section-iterator automatically // skips to the begin-point, we loose the index or have to recalculate it) // So we mimic it here template static inline void get_start_point_iterator(Section & section, Range const& range, typename boost::range_iterator::type& it, typename boost::range_iterator::type& prev, typename boost::range_iterator::type& end, int& index, int& ndi, int dir, Box const& other_bounding_box) { it = boost::begin(range) + section.begin_index; end = boost::begin(range) + section.end_index + 1; // Mimic section-iterator: // Skip to point such that section interects other box prev = it++; for(; it != end && preceding<0>(dir, *it, other_bounding_box); prev = it++, index++, ndi++) {} // Go back one step because we want to start completely preceding it = prev; } }; struct get_section_box { template static inline void apply(Box& total, InputItem const& item) { geometry::expand(total, item.bounding_box); } }; struct ovelaps_section_box { template static inline bool apply(Box const& box, InputItem const& item) { return ! detail::disjoint::disjoint_box_box(box, item.bounding_box); } }; template < typename Geometry1, typename Geometry2, bool Reverse1, bool Reverse2, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct section_visitor { int m_source_id1; Geometry1 const& m_geometry1; int m_source_id2; Geometry2 const& m_geometry2; Turns& m_turns; InterruptPolicy& m_interrupt_policy; section_visitor(int id1, Geometry1 const& g1, int id2, Geometry2 const& g2, Turns& turns, InterruptPolicy& ip) : m_source_id1(id1), m_geometry1(g1) , m_source_id2(id2), m_geometry2(g2) , m_turns(turns) , m_interrupt_policy(ip) {} template inline bool apply(Section const& sec1, Section const& sec2) { if (! detail::disjoint::disjoint_box_box(sec1.bounding_box, sec2.bounding_box)) { return get_turns_in_sections < Geometry1, Geometry2, Reverse1, Reverse2, Section, Section, Turns, TurnPolicy, InterruptPolicy >::apply( m_source_id1, m_geometry1, sec1, m_source_id2, m_geometry2, sec2, false, m_turns, m_interrupt_policy); } return true; } }; template < typename Geometry1, typename Geometry2, bool Reverse1, bool Reverse2, typename Turns, typename TurnPolicy, typename InterruptPolicy > class get_turns_generic { public: static inline void apply( int source_id1, Geometry1 const& geometry1, int source_id2, Geometry2 const& geometry2, Turns& turns, InterruptPolicy& interrupt_policy) { // First create monotonic sections... typedef typename boost::range_value::type ip_type; typedef typename ip_type::point_type point_type; typedef model::box box_type; typedef typename geometry::sections sections_type; sections_type sec1, sec2; geometry::sectionalize(geometry1, sec1, 0); geometry::sectionalize(geometry2, sec2, 1); // ... and then partition them, intersecting overlapping sections in visitor method section_visitor < Geometry1, Geometry2, Reverse1, Reverse2, Turns, TurnPolicy, InterruptPolicy > visitor(source_id1, geometry1, source_id2, geometry2, turns, interrupt_policy); geometry::partition < box_type, get_section_box, ovelaps_section_box >::apply(sec1, sec2, visitor); } }; // Get turns for a range with a box, following Cohen-Sutherland (cs) approach template < typename Range, typename Box, bool ReverseRange, bool ReverseBox, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns_cs { typedef typename boost::range_value::type turn_info; typedef typename geometry::point_type::type point_type; typedef typename geometry::point_type::type box_point_type; typedef typename closeable_view < Range const, closure::value >::type cview_type; typedef typename reversible_view < cview_type const, ReverseRange ? iterate_reverse : iterate_forward >::type view_type; typedef typename boost::range_iterator < view_type const >::type iterator_type; static inline void apply( int source_id1, Range const& range, int source_id2, Box const& box, Turns& turns, InterruptPolicy& interrupt_policy, int multi_index = -1, int ring_index = -1) { if (boost::size(range) <= 1) { return; } boost::array bp; assign_box_corners_oriented(box, bp); cview_type cview(range); view_type view(cview); iterator_type it = boost::begin(view); ever_circling_iterator next( boost::begin(view), boost::end(view), it, true); next++; next++; //bool first = true; //char previous_side[2] = {0, 0}; int index = 0; for (iterator_type prev = it++; it != boost::end(view); prev = it++, next++, index++) { segment_identifier seg_id(source_id1, multi_index, ring_index, index); /*if (first) { previous_side[0] = get_side<0>(box, *prev); previous_side[1] = get_side<1>(box, *prev); } char current_side[2]; current_side[0] = get_side<0>(box, *it); current_side[1] = get_side<1>(box, *it); // There can NOT be intersections if // 1) EITHER the two points are lying on one side of the box (! 0 && the same) // 2) OR same in Y-direction // 3) OR all points are inside the box (0) if (! ( (current_side[0] != 0 && current_side[0] == previous_side[0]) || (current_side[1] != 0 && current_side[1] == previous_side[1]) || (current_side[0] == 0 && current_side[1] == 0 && previous_side[0] == 0 && previous_side[1] == 0) ) )*/ if (true) { get_turns_with_box(seg_id, source_id2, *prev, *it, *next, bp[0], bp[1], bp[2], bp[3], turns, interrupt_policy); // Future performance enhancement: // return if told by the interrupt policy } } } private: template static inline int get_side(Box const& box, Point const& point) { // Inside -> 0 // Outside -> -1 (left/below) or 1 (right/above) // On border -> -2 (left/lower) or 2 (right/upper) // The only purpose of the value is to not be the same, // and to denote if it is inside (0) typename coordinate_type::type const& c = get(point); typename coordinate_type::type const& left = get(box); typename coordinate_type::type const& right = get(box); if (geometry::math::equals(c, left)) return -2; else if (geometry::math::equals(c, right)) return 2; else if (c < left) return -1; else if (c > right) return 1; else return 0; } static inline void get_turns_with_box(segment_identifier const& seg_id, int source_id2, // Points from a range: point_type const& rp0, point_type const& rp1, point_type const& rp2, // Points from the box box_point_type const& bp0, box_point_type const& bp1, box_point_type const& bp2, box_point_type const& bp3, // Output Turns& turns, InterruptPolicy& interrupt_policy) { // Depending on code some relations can be left out typedef typename boost::range_value::type turn_info; turn_info ti; ti.operations[0].seg_id = seg_id; ti.operations[0].other_id = ti.operations[1].seg_id; ti.operations[1].other_id = seg_id; ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 0); TurnPolicy::apply(rp0, rp1, rp2, bp0, bp1, bp2, ti, std::back_inserter(turns)); ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 1); TurnPolicy::apply(rp0, rp1, rp2, bp1, bp2, bp3, ti, std::back_inserter(turns)); ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 2); TurnPolicy::apply(rp0, rp1, rp2, bp2, bp3, bp0, ti, std::back_inserter(turns)); ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 3); TurnPolicy::apply(rp0, rp1, rp2, bp3, bp0, bp1, ti, std::back_inserter(turns)); if (InterruptPolicy::enabled) { interrupt_policy.apply(turns); } } }; template < typename Polygon, typename Box, bool Reverse, bool ReverseBox, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns_polygon_cs { static inline void apply( int source_id1, Polygon const& polygon, int source_id2, Box const& box, Turns& turns, InterruptPolicy& interrupt_policy, int multi_index = -1) { typedef typename geometry::ring_type::type ring_type; typedef detail::get_turns::get_turns_cs < ring_type, Box, Reverse, ReverseBox, Turns, TurnPolicy, InterruptPolicy > intersector_type; intersector_type::apply( source_id1, geometry::exterior_ring(polygon), source_id2, box, turns, interrupt_policy, multi_index, -1); int i = 0; typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it, ++i) { intersector_type::apply( source_id1, *it, source_id2, box, turns, interrupt_policy, multi_index, i); } } }; }} // namespace detail::get_turns #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { // Because this is "detail" method, and most implementations will use "generic", // we take the freedom to derive it from "generic". template < typename GeometryTag1, typename GeometryTag2, typename Geometry1, typename Geometry2, bool Reverse1, bool Reverse2, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns : detail::get_turns::get_turns_generic < Geometry1, Geometry2, Reverse1, Reverse2, Turns, TurnPolicy, InterruptPolicy > {}; template < typename Polygon, typename Box, bool ReversePolygon, bool ReverseBox, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns < polygon_tag, box_tag, Polygon, Box, ReversePolygon, ReverseBox, Turns, TurnPolicy, InterruptPolicy > : detail::get_turns::get_turns_polygon_cs < Polygon, Box, ReversePolygon, ReverseBox, Turns, TurnPolicy, InterruptPolicy > {}; template < typename Ring, typename Box, bool ReverseRing, bool ReverseBox, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns < ring_tag, box_tag, Ring, Box, ReverseRing, ReverseBox, Turns, TurnPolicy, InterruptPolicy > : detail::get_turns::get_turns_cs < Ring, Box, ReverseRing, ReverseBox, Turns, TurnPolicy, InterruptPolicy > {}; template < typename GeometryTag1, typename GeometryTag2, typename Geometry1, typename Geometry2, bool Reverse1, bool Reverse2, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns_reversed { static inline void apply( int source_id1, Geometry1 const& g1, int source_id2, Geometry2 const& g2, Turns& turns, InterruptPolicy& interrupt_policy) { get_turns < GeometryTag2, GeometryTag1, Geometry2, Geometry1, Reverse2, Reverse1, Turns, TurnPolicy, InterruptPolicy >::apply(source_id2, g2, source_id1, g1, turns, interrupt_policy); } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_calc2{turn points} \ingroup overlay \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam Turns type of turn-container (e.g. vector of "intersection/turn point"'s) \param geometry1 \param_geometry \param geometry2 \param_geometry \param turns container which will contain turn points \param interrupt_policy policy determining if process is stopped when intersection is found */ template < bool Reverse1, bool Reverse2, typename AssignPolicy, typename Geometry1, typename Geometry2, typename Turns, typename InterruptPolicy > inline void get_turns(Geometry1 const& geometry1, Geometry2 const& geometry2, Turns& turns, InterruptPolicy& interrupt_policy) { concept::check_concepts_and_equal_dimensions(); typedef typename strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, typename boost::range_value::type >::segment_intersection_strategy_type segment_intersection_strategy_type; typedef detail::overlay::get_turn_info < typename point_type::type, typename point_type::type, typename boost::range_value::type, AssignPolicy > TurnPolicy; boost::mpl::if_c < reverse_dispatch::type::value, dispatch::get_turns_reversed < typename tag::type, typename tag::type, Geometry1, Geometry2, Reverse1, Reverse2, Turns, TurnPolicy, InterruptPolicy >, dispatch::get_turns < typename tag::type, typename tag::type, Geometry1, Geometry2, Reverse1, Reverse2, Turns, TurnPolicy, InterruptPolicy > >::type::apply( 0, geometry1, 1, geometry2, turns, interrupt_policy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP handle_tangencies.hpp000444000765000024 6052412161110644 31405 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_TANGENCIES_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_TANGENCIES_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template < typename TurnPoints, typename Indexed, typename Geometry1, typename Geometry2, bool Reverse1, bool Reverse2, typename Strategy > struct sort_in_cluster { inline sort_in_cluster(TurnPoints const& turn_points , Geometry1 const& geometry1 , Geometry2 const& geometry2 , Strategy const& strategy) : m_turn_points(turn_points) , m_geometry1(geometry1) , m_geometry2(geometry2) , m_strategy(strategy) {} private : TurnPoints const& m_turn_points; Geometry1 const& m_geometry1; Geometry2 const& m_geometry2; Strategy const& m_strategy; typedef typename Indexed::type turn_operation_type; typedef typename geometry::point_type::type point_type; typedef model::referring_segment segment_type; // Determine how p/r and p/s are located. template static inline void overlap_info(P const& pi, P const& pj, P const& ri, P const& rj, P const& si, P const& sj, bool& pr_overlap, bool& ps_overlap, bool& rs_overlap) { // Determine how p/r and p/s are located. // One of them is coming from opposite direction. typedef strategy::intersection::relate_cartesian_segments < policies::relate::segments_intersection_points < segment_type, segment_type, segment_intersection_points > > policy; segment_type p(pi, pj); segment_type r(ri, rj); segment_type s(si, sj); // Get the intersection point (or two points) segment_intersection_points pr = policy::apply(p, r); segment_intersection_points ps = policy::apply(p, s); segment_intersection_points rs = policy::apply(r, s); // Check on overlap pr_overlap = pr.count == 2; ps_overlap = ps.count == 2; rs_overlap = rs.count == 2; } #ifdef BOOST_GEOMETRY_DEBUG_ENRICH inline void debug_consider(int order, Indexed const& left, Indexed const& right, std::string const& header, bool skip = true, std::string const& extra = "", bool ret = false ) const { if (skip) return; point_type pi, pj, ri, rj, si, sj; geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.seg_id, pi, pj); geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.other_id, ri, rj); geometry::copy_segment_points(m_geometry1, m_geometry2, right.subject.other_id, si, sj); bool prc = false, psc = false, rsc = false; overlap_info(pi, pj, ri, rj, si, sj, prc, psc, rsc); int const side_ri_p = m_strategy.apply(pi, pj, ri); int const side_rj_p = m_strategy.apply(pi, pj, rj); int const side_si_p = m_strategy.apply(pi, pj, si); int const side_sj_p = m_strategy.apply(pi, pj, sj); int const side_si_r = m_strategy.apply(ri, rj, si); int const side_sj_r = m_strategy.apply(ri, rj, sj); std::cout << "Case: " << header << " for " << left.index << " / " << right.index << std::endl; #ifdef BOOST_GEOMETRY_DEBUG_ENRICH_MORE std::cout << " Segment p:" << geometry::wkt(pi) << " .. " << geometry::wkt(pj) << std::endl; std::cout << " Segment r:" << geometry::wkt(ri) << " .. " << geometry::wkt(rj) << std::endl; std::cout << " Segment s:" << geometry::wkt(si) << " .. " << geometry::wkt(sj) << std::endl; std::cout << " r//p: " << side_ri_p << " / " << side_rj_p << std::endl; std::cout << " s//p: " << side_si_p << " / " << side_sj_p << std::endl; std::cout << " s//r: " << side_si_r << " / " << side_sj_r << std::endl; #endif std::cout << header //<< " order: " << order << " ops: " << operation_char(left.subject.operation) << "/" << operation_char(right.subject.operation) << " ri//p: " << side_ri_p << " si//p: " << side_si_p << " si//r: " << side_si_r << " cnts: " << int(prc) << "," << int(psc) << "," << int(rsc) //<< " idx: " << left.index << "/" << right.index ; if (! extra.empty()) { std::cout << " " << extra << " " << (ret ? "true" : "false"); } std::cout << std::endl; } #else inline void debug_consider(int, Indexed const& , Indexed const& , std::string const& , bool = true, std::string const& = "", bool = false ) const {} #endif // ux/ux inline bool consider_ux_ux(Indexed const& left, Indexed const& right , std::string const& // header ) const { bool ret = left.index < right.index; // In combination of u/x, x/u: take first union, then blocked. // Solves #88, #61, #56, #80 if (left.subject.operation == operation_union && right.subject.operation == operation_blocked) { ret = true; } else if (left.subject.operation == operation_blocked && right.subject.operation == operation_union) { ret = false; } else { #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << "ux/ux unhandled" << std::endl; #endif } //debug_consider(0, left, right, header, false, "-> return ", ret); return ret; } inline bool consider_iu_ux(Indexed const& left, Indexed const& right, int order // 1: iu first, -1: ux first , std::string const& // header ) const { bool ret = false; if (left.subject.operation == operation_union && right.subject.operation == operation_union) { ret = order == 1; } else if (left.subject.operation == operation_union && right.subject.operation == operation_blocked) { ret = true; } else if (right.subject.operation == operation_union && left.subject.operation == operation_blocked) { ret = false; } else if (left.subject.operation == operation_union) { ret = true; } else if (right.subject.operation == operation_union) { ret = false; } else { #ifdef BOOST_GEOMETRY_DEBUG_ENRICH // this still happens in the traverse.cpp test std::cout << " iu/ux unhandled" << std::endl; #endif ret = order == 1; } //debug_consider(0, left, right, header, false, "-> return", ret); return ret; } inline bool consider_iu_ix(Indexed const& left, Indexed const& right, int order // 1: iu first, -1: ix first , std::string const& // header ) const { //debug_consider(order, left, right, header, false, "iu/ix"); return left.subject.operation == operation_intersection && right.subject.operation == operation_intersection ? order == 1 : left.subject.operation == operation_intersection ? false : right.subject.operation == operation_intersection ? true : order == 1; } inline bool consider_ix_ix(Indexed const& left, Indexed const& right , std::string const& // header ) const { // Take first intersection, then blocked. if (left.subject.operation == operation_intersection && right.subject.operation == operation_blocked) { return true; } else if (left.subject.operation == operation_blocked && right.subject.operation == operation_intersection) { return false; } // Default case, should not occur #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << "ix/ix unhandled" << std::endl; #endif //debug_consider(0, left, right, header, false, "-> return", ret); return left.index < right.index; } inline bool consider_iu_iu(Indexed const& left, Indexed const& right, std::string const& header) const { //debug_consider(0, left, right, header); // In general, order it like "union, intersection". if (left.subject.operation == operation_intersection && right.subject.operation == operation_union) { //debug_consider(0, left, right, header, false, "i,u", false); return false; } else if (left.subject.operation == operation_union && right.subject.operation == operation_intersection) { //debug_consider(0, left, right, header, false, "u,i", true); return true; } point_type pi, pj, ri, rj, si, sj; geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.seg_id, pi, pj); geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.other_id, ri, rj); geometry::copy_segment_points(m_geometry1, m_geometry2, right.subject.other_id, si, sj); int const side_ri_p = m_strategy.apply(pi, pj, ri); int const side_si_p = m_strategy.apply(pi, pj, si); int const side_si_r = m_strategy.apply(ri, rj, si); // Both located at same side (#58, pie_21_7_21_0_3) if (side_ri_p * side_si_p == 1 && side_si_r != 0) { // Take the most left one if (left.subject.operation == operation_union && right.subject.operation == operation_union) { bool ret = side_si_r == 1; //debug_consider(0, left, right, header, false, "same side", ret); return ret; } } // Coming from opposite sides (#59, #99) if (side_ri_p * side_si_p == -1) { bool ret = false; { ret = side_ri_p == 1; // #100 debug_consider(0, left, right, header, false, "opp.", ret); return ret; } #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << " iu/iu coming from opposite unhandled" << std::endl; #endif } // We need EXTRA information here: are p/r/s overlapping? bool pr_ov = false, ps_ov = false, rs_ov = false; overlap_info(pi, pj, ri, rj, si, sj, pr_ov, ps_ov, rs_ov); // One coming from right (#83,#90) // One coming from left (#90, #94, #95) if (side_si_r != 0 && (side_ri_p != 0 || side_si_p != 0)) { bool ret = false; if (pr_ov || ps_ov) { int r = side_ri_p != 0 ? side_ri_p : side_si_p; ret = r * side_si_r == 1; } else { ret = side_si_r == 1; } debug_consider(0, left, right, header, false, "left or right", ret); return ret; } // All aligned (#92, #96) if (side_ri_p == 0 && side_si_p == 0 && side_si_r == 0) { // One of them is coming from opposite direction. // Take the one NOT overlapping bool ret = false; bool found = false; if (pr_ov && ! ps_ov) { ret = true; found = true; } else if (!pr_ov && ps_ov) { ret = false; found = true; } debug_consider(0, left, right, header, false, "aligned", ret); if (found) { return ret; } } #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << " iu/iu unhandled" << std::endl; debug_consider(0, left, right, header, false, "unhandled", left.index < right.index); #endif return left.index < right.index; } inline bool consider_ii(Indexed const& left, Indexed const& right, std::string const& header) const { debug_consider(0, left, right, header); point_type pi, pj, ri, rj, si, sj; geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.seg_id, pi, pj); geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.other_id, ri, rj); geometry::copy_segment_points(m_geometry1, m_geometry2, right.subject.other_id, si, sj); int const side_ri_p = m_strategy.apply(pi, pj, ri); int const side_si_p = m_strategy.apply(pi, pj, si); // Two other points are (mostly) lying both right of the considered segment // Take the most left one int const side_si_r = m_strategy.apply(ri, rj, si); if (side_ri_p == -1 && side_si_p == -1 && side_si_r != 0) { bool const ret = side_si_r != 1; return ret; } return left.index < right.index; } public : inline bool operator()(Indexed const& left, Indexed const& right) const { bool const default_order = left.index < right.index; if ((m_turn_points[left.index].discarded || left.discarded) && (m_turn_points[right.index].discarded || right.discarded)) { return default_order; } else if (m_turn_points[left.index].discarded || left.discarded) { // Be careful to sort discarded first, then all others return true; } else if (m_turn_points[right.index].discarded || right.discarded) { // See above so return false here such that right (discarded) // is sorted before left (not discarded) return false; } else if (m_turn_points[left.index].combination(operation_blocked, operation_union) && m_turn_points[right.index].combination(operation_blocked, operation_union)) { // ux/ux return consider_ux_ux(left, right, "ux/ux"); } else if (m_turn_points[left.index].both(operation_union) && m_turn_points[right.index].both(operation_union)) { // uu/uu, Order is arbitrary // Note: uu/uu is discarded now before so this point will // not be reached. return default_order; } else if (m_turn_points[left.index].combination(operation_intersection, operation_union) && m_turn_points[right.index].combination(operation_intersection, operation_union)) { return consider_iu_iu(left, right, "iu/iu"); } else if (m_turn_points[left.index].combination(operation_intersection, operation_blocked) && m_turn_points[right.index].combination(operation_intersection, operation_blocked)) { return consider_ix_ix(left, right, "ix/ix"); } else if (m_turn_points[left.index].both(operation_intersection) && m_turn_points[right.index].both(operation_intersection)) { return consider_ii(left, right, "ii/ii"); } else if (m_turn_points[left.index].combination(operation_union, operation_blocked) && m_turn_points[right.index].combination(operation_intersection, operation_union)) { return consider_iu_ux(left, right, -1, "ux/iu"); } else if (m_turn_points[left.index].combination(operation_intersection, operation_union) && m_turn_points[right.index].combination(operation_union, operation_blocked)) { return consider_iu_ux(left, right, 1, "iu/ux"); } else if (m_turn_points[left.index].combination(operation_intersection, operation_blocked) && m_turn_points[right.index].combination(operation_intersection, operation_union)) { return consider_iu_ix(left, right, 1, "ix/iu"); } else if (m_turn_points[left.index].combination(operation_intersection, operation_union) && m_turn_points[right.index].combination(operation_intersection, operation_blocked)) { return consider_iu_ix(left, right, -1, "iu/ix"); } else if (m_turn_points[left.index].method != method_equal && m_turn_points[right.index].method == method_equal ) { // If one of them was EQUAL or CONTINUES, it should always come first return false; } else if (m_turn_points[left.index].method == method_equal && m_turn_points[right.index].method != method_equal ) { return true; } // Now we have no clue how to sort. #ifdef BOOST_GEOMETRY_DEBUG_ENRICH std::cout << " Consider: " << operation_char(m_turn_points[left.index].operations[0].operation) << operation_char(m_turn_points[left.index].operations[1].operation) << "/" << operation_char(m_turn_points[right.index].operations[0].operation) << operation_char(m_turn_points[right.index].operations[1].operation) << " " << " Take " << left.index << " < " << right.index << std::endl; #endif return default_order; } }; template < typename IndexType, typename Iterator, typename TurnPoints, typename Geometry1, typename Geometry2, typename Strategy > inline void inspect_cluster(Iterator begin_cluster, Iterator end_cluster, TurnPoints& turn_points, operation_type , Geometry1 const& , Geometry2 const& , Strategy const& ) { int count = 0; // Make an analysis about all occuring cases here. std::map, int> inspection; for (Iterator it = begin_cluster; it != end_cluster; ++it) { operation_type first = turn_points[it->index].operations[0].operation; operation_type second = turn_points[it->index].operations[1].operation; if (first > second) { std::swap(first, second); } inspection[std::make_pair(first, second)]++; count++; } bool keep_cc = false; // Decide about which is going to be discarded here. if (inspection[std::make_pair(operation_union, operation_union)] == 1 && inspection[std::make_pair(operation_continue, operation_continue)] == 1) { // In case of uu/cc, discard the uu, that indicates a tangency and // inclusion would disturb the (e.g.) cc-cc-cc ordering // NOTE: uu is now discarded anyhow. keep_cc = true; } else if (count == 2 && inspection[std::make_pair(operation_intersection, operation_intersection)] == 1 && inspection[std::make_pair(operation_union, operation_intersection)] == 1) { // In case of ii/iu, discard the iu. The ii should always be visited, // Because (in case of not discarding iu) correctly ordering of ii/iu appears impossible for (Iterator it = begin_cluster; it != end_cluster; ++it) { if (turn_points[it->index].combination(operation_intersection, operation_union)) { it->discarded = true; } } } // Discard any continue turn, unless it is the only thing left // (necessary to avoid cc-only rings, all being discarded // e.g. traversal case #75) int nd_count= 0, cc_count = 0; for (Iterator it = begin_cluster; it != end_cluster; ++it) { if (! it->discarded) { nd_count++; if (turn_points[it->index].both(operation_continue)) { cc_count++; } } } if (nd_count == cc_count) { keep_cc = true; } if (! keep_cc) { for (Iterator it = begin_cluster; it != end_cluster; ++it) { if (turn_points[it->index].both(operation_continue)) { it->discarded = true; } } } } template < typename IndexType, bool Reverse1, bool Reverse2, typename Iterator, typename TurnPoints, typename Geometry1, typename Geometry2, typename Strategy > inline void handle_cluster(Iterator begin_cluster, Iterator end_cluster, TurnPoints& turn_points, operation_type for_operation, Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy) { // First inspect and (possibly) discard rows inspect_cluster(begin_cluster, end_cluster, turn_points, for_operation, geometry1, geometry2, strategy); // Then sort this range (discard rows will be ordered first and will be removed in enrich_assign) std::sort(begin_cluster, end_cluster, sort_in_cluster < TurnPoints, IndexType, Geometry1, Geometry2, Reverse1, Reverse2, Strategy >(turn_points, geometry1, geometry2, strategy)); #ifdef BOOST_GEOMETRY_DEBUG_ENRICH typedef typename IndexType::type operations_type; operations_type const& op = turn_points[begin_cluster->index].operations[begin_cluster->operation_index]; std::cout << "Clustered points on equal distance " << op.enriched.distance << std::endl; std::cout << "->Indexes "; for (Iterator it = begin_cluster; it != end_cluster; ++it) { std::cout << " " << it->index; } std::cout << std::endl << "->Methods: "; for (Iterator it = begin_cluster; it != end_cluster; ++it) { std::cout << " " << method_char(turn_points[it->index].method); } std::cout << std::endl << "->Operations: "; for (Iterator it = begin_cluster; it != end_cluster; ++it) { std::cout << " " << operation_char(turn_points[it->index].operations[0].operation) << operation_char(turn_points[it->index].operations[1].operation); } std::cout << std::endl << "->Discarded: "; for (Iterator it = begin_cluster; it != end_cluster; ++it) { std::cout << " " << (it->discarded ? "true" : "false"); } std::cout << std::endl; //<< "\tOn segments: " << prev_op.seg_id << " / " << prev_op.other_id //<< " and " << op.seg_id << " / " << op.other_id //<< geometry::distance(turn_points[prev->index].point, turn_points[it->index].point) #endif } }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_TANGENCIES_HPP intersection_insert.hpp000444000765000024 4564212161110625 32047 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_INSERT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_INSERT_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(BOOST_GEOMETRY_DEBUG_FOLLOW) #include #endif namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace intersection { template struct intersection_segment_segment_point { template < typename Segment1, typename Segment2, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Segment1 const& segment1, Segment2 const& segment2, OutputIterator out, Strategy const& ) { typedef typename point_type::type point_type; // Get the intersection point (or two points) segment_intersection_points is = strategy::intersection::relate_cartesian_segments < policies::relate::segments_intersection_points < Segment1, Segment2, segment_intersection_points > >::apply(segment1, segment2); for (std::size_t i = 0; i < is.count; i++) { PointOut p; geometry::convert(is.intersections[i], p); *out++ = p; } return out; } }; template struct intersection_linestring_linestring_point { template < typename Linestring1, typename Linestring2, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Linestring1 const& linestring1, Linestring2 const& linestring2, OutputIterator out, Strategy const& ) { typedef typename point_type::type point_type; typedef detail::overlay::turn_info turn_info; std::deque turns; geometry::get_intersection_points(linestring1, linestring2, turns); for (typename boost::range_iterator const>::type it = boost::begin(turns); it != boost::end(turns); ++it) { PointOut p; geometry::convert(it->point, p); *out++ = p; } return out; } }; /*! \brief Version of linestring with an areal feature (polygon or multipolygon) */ template < bool ReverseAreal, typename LineStringOut, overlay_type OverlayType > struct intersection_of_linestring_with_areal { #if defined(BOOST_GEOMETRY_DEBUG_FOLLOW) template static inline void debug_follow(Turn const& turn, Operation op, int index) { std::cout << index << " at " << op.seg_id << " meth: " << method_char(turn.method) << " op: " << operation_char(op.operation) << " vis: " << visited_char(op.visited) << " of: " << operation_char(turn.operations[0].operation) << operation_char(turn.operations[1].operation) << " " << geometry::wkt(turn.point) << std::endl; } #endif template < typename LineString, typename Areal, typename OutputIterator, typename Strategy > static inline OutputIterator apply(LineString const& linestring, Areal const& areal, OutputIterator out, Strategy const& ) { if (boost::size(linestring) == 0) { return out; } typedef detail::overlay::follow < LineStringOut, LineString, Areal, OverlayType > follower; typedef typename point_type::type point_type; typedef detail::overlay::traversal_turn_info turn_info; std::deque turns; detail::get_turns::no_interrupt_policy policy; geometry::get_turns < false, (OverlayType == overlay_intersection ? ReverseAreal : !ReverseAreal), detail::overlay::calculate_distance_policy >(linestring, areal, turns, policy); if (turns.empty()) { // No intersection points, it is either completely // inside (interior + borders) // or completely outside // Use border point (on a segment) to check this // (because turn points might skip some cases) point_type border_point; if (! geometry::point_on_border(border_point, linestring, true)) { return out; } if (follower::included(border_point, areal)) { LineStringOut copy; geometry::convert(linestring, copy); *out++ = copy; } return out; } #if defined(BOOST_GEOMETRY_DEBUG_FOLLOW) int index = 0; BOOST_FOREACH(turn_info const& turn, turns) { debug_follow(turn, turn.operations[0], index++); } #endif return follower::apply ( linestring, areal, geometry::detail::overlay::operation_intersection, turns, out ); } }; }} // namespace detail::intersection #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < // real types typename Geometry1, typename Geometry2, typename GeometryOut, overlay_type OverlayType, // orientation bool Reverse1 = detail::overlay::do_reverse::value>::value, bool Reverse2 = detail::overlay::do_reverse::value>::value, bool ReverseOut = detail::overlay::do_reverse::value>::value, // tag dispatching: typename TagIn1 = typename geometry::tag::type, typename TagIn2 = typename geometry::tag::type, typename TagOut = typename geometry::tag::type, // metafunction finetuning helpers: bool Areal1 = geometry::is_areal::value, bool Areal2 = geometry::is_areal::value, bool ArealOut = geometry::is_areal::value > struct intersection_insert { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPES_OR_ORIENTATIONS , (types) ); }; template < typename Geometry1, typename Geometry2, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut, typename TagIn1, typename TagIn2, typename TagOut > struct intersection_insert < Geometry1, Geometry2, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, TagIn1, TagIn2, TagOut, true, true, true > : detail::overlay::overlay {}; // Any areal type with box: template < typename Geometry, typename Box, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut, typename TagIn, typename TagOut > struct intersection_insert < Geometry, Box, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, TagIn, box_tag, TagOut, true, true, true > : detail::overlay::overlay {}; template < typename Segment1, typename Segment2, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut > struct intersection_insert < Segment1, Segment2, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, segment_tag, segment_tag, point_tag, false, false, false > : detail::intersection::intersection_segment_segment_point {}; template < typename Linestring1, typename Linestring2, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut > struct intersection_insert < Linestring1, Linestring2, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, linestring_tag, linestring_tag, point_tag, false, false, false > : detail::intersection::intersection_linestring_linestring_point {}; template < typename Linestring, typename Box, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut > struct intersection_insert < Linestring, Box, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, linestring_tag, box_tag, linestring_tag, false, true, false > { template static inline OutputIterator apply(Linestring const& linestring, Box const& box, OutputIterator out, Strategy const& ) { typedef typename point_type::type point_type; strategy::intersection::liang_barsky lb_strategy; return detail::intersection::clip_range_with_box (box, linestring, out, lb_strategy); } }; template < typename Linestring, typename Polygon, typename GeometryOut, overlay_type OverlayType, bool ReverseLinestring, bool ReversePolygon, bool ReverseOut > struct intersection_insert < Linestring, Polygon, GeometryOut, OverlayType, ReverseLinestring, ReversePolygon, ReverseOut, linestring_tag, polygon_tag, linestring_tag, false, true, false > : detail::intersection::intersection_of_linestring_with_areal < ReversePolygon, GeometryOut, OverlayType > {}; template < typename Linestring, typename Ring, typename GeometryOut, overlay_type OverlayType, bool ReverseLinestring, bool ReverseRing, bool ReverseOut > struct intersection_insert < Linestring, Ring, GeometryOut, OverlayType, ReverseLinestring, ReverseRing, ReverseOut, linestring_tag, ring_tag, linestring_tag, false, true, false > : detail::intersection::intersection_of_linestring_with_areal < ReverseRing, GeometryOut, OverlayType > {}; template < typename Segment, typename Box, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut > struct intersection_insert < Segment, Box, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, segment_tag, box_tag, linestring_tag, false, true, false > { template static inline OutputIterator apply(Segment const& segment, Box const& box, OutputIterator out, Strategy const& ) { geometry::segment_view range(segment); typedef typename point_type::type point_type; strategy::intersection::liang_barsky lb_strategy; return detail::intersection::clip_range_with_box (box, range, out, lb_strategy); } }; template < typename Geometry1, typename Geometry2, typename PointOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut, typename Tag1, typename Tag2, bool Areal1, bool Areal2 > struct intersection_insert < Geometry1, Geometry2, PointOut, OverlayType, Reverse1, Reverse2, ReverseOut, Tag1, Tag2, point_tag, Areal1, Areal2, false > { template static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out, Strategy const& ) { typedef detail::overlay::turn_info turn_info; std::vector turns; detail::get_turns::no_interrupt_policy policy; geometry::get_turns < false, false, detail::overlay::assign_null_policy >(geometry1, geometry2, turns, policy); for (typename std::vector::const_iterator it = turns.begin(); it != turns.end(); ++it) { *out++ = it->point; } return out; } }; template < typename Geometry1, typename Geometry2, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut > struct intersection_insert_reversed { template static inline OutputIterator apply(Geometry1 const& g1, Geometry2 const& g2, OutputIterator out, Strategy const& strategy) { return intersection_insert < Geometry2, Geometry1, GeometryOut, OverlayType, Reverse2, Reverse1, ReverseOut >::apply(g2, g1, out, strategy); } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace intersection { template < typename GeometryOut, bool ReverseSecond, overlay_type OverlayType, typename Geometry1, typename Geometry2, typename OutputIterator, typename Strategy > inline OutputIterator insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out, Strategy const& strategy) { return boost::mpl::if_c < geometry::reverse_dispatch::type::value, geometry::dispatch::intersection_insert_reversed < Geometry1, Geometry2, GeometryOut, OverlayType, overlay::do_reverse::value>::value, overlay::do_reverse::value, ReverseSecond>::value, overlay::do_reverse::value>::value >, geometry::dispatch::intersection_insert < Geometry1, Geometry2, GeometryOut, OverlayType, geometry::detail::overlay::do_reverse::value>::value, geometry::detail::overlay::do_reverse::value, ReverseSecond>::value > >::type::apply(geometry1, geometry2, out, strategy); } /*! \brief \brief_calc2{intersection} \brief_strategy \ingroup intersection \details \details_calc2{intersection_insert, spatial set theoretic intersection} \brief_strategy. \details_insert{intersection} \tparam GeometryOut \tparam_geometry{\p_l_or_c} \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam OutputIterator \tparam_out{\p_l_or_c} \tparam Strategy \tparam_strategy_overlay \param geometry1 \param_geometry \param geometry2 \param_geometry \param out \param_out{intersection} \param strategy \param_strategy{intersection} \return \return_out \qbk{distinguish,with strategy} \qbk{[include reference/algorithms/intersection.qbk]} */ template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator, typename Strategy > inline OutputIterator intersection_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out, Strategy const& strategy) { concept::check(); concept::check(); return detail::intersection::insert < GeometryOut, false, overlay_intersection >(geometry1, geometry2, out, strategy); } /*! \brief \brief_calc2{intersection} \ingroup intersection \details \details_calc2{intersection_insert, spatial set theoretic intersection}. \details_insert{intersection} \tparam GeometryOut \tparam_geometry{\p_l_or_c} \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry \tparam OutputIterator \tparam_out{\p_l_or_c} \param geometry1 \param_geometry \param geometry2 \param_geometry \param out \param_out{intersection} \return \return_out \qbk{[include reference/algorithms/intersection.qbk]} */ template < typename GeometryOut, typename Geometry1, typename Geometry2, typename OutputIterator > inline OutputIterator intersection_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out) { concept::check(); concept::check(); typedef strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, typename geometry::point_type::type > strategy; return intersection_insert(geometry1, geometry2, out, strategy()); } }} // namespace detail::intersection #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_INSERT_HPP overlay.hpp000444000765000024 2276312161110615 27434 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE # include #endif namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { // Skip for assemble process template inline bool skip(TurnInfo const& turn_info) { return (turn_info.discarded || turn_info.both(operation_union)) && ! turn_info.any_blocked() && ! turn_info.both(operation_intersection) ; } template inline void map_turns(Map& map, TurnPoints const& turn_points) { typedef typename boost::range_value::type turn_point_type; typedef typename turn_point_type::container_type container_type; int index = 0; for (typename boost::range_iterator::type it = boost::begin(turn_points); it != boost::end(turn_points); ++it, ++index) { if (! skip(*it)) { int op_index = 0; for (typename boost::range_iterator::type op_it = boost::begin(it->operations); op_it != boost::end(it->operations); ++op_it, ++op_index) { ring_identifier ring_id ( op_it->seg_id.source_index, op_it->seg_id.multi_index, op_it->seg_id.ring_index ); map[ring_id]++; } } } } template < typename GeometryOut, overlay_type Direction, bool ReverseOut, typename Geometry1, typename Geometry2, typename OutputIterator > inline OutputIterator return_if_one_input_is_empty(Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out) { typedef std::deque < typename geometry::ring_type::type > ring_container_type; typedef ring_properties::type> properties; // Union: return either of them // Intersection: return nothing // Difference: return first of them if (Direction == overlay_intersection || (Direction == overlay_difference && geometry::num_points(geometry1) == 0)) { return out; } std::map empty; std::map all_of_one_of_them; select_rings(geometry1, geometry2, empty, all_of_one_of_them, false); ring_container_type rings; assign_parents(geometry1, geometry2, rings, all_of_one_of_them); return add_rings(all_of_one_of_them, geometry1, geometry2, rings, out); } template < typename Geometry1, typename Geometry2, bool Reverse1, bool Reverse2, bool ReverseOut, typename GeometryOut, overlay_type Direction > struct overlay { template static inline OutputIterator apply( Geometry1 const& geometry1, Geometry2 const& geometry2, OutputIterator out, Strategy const& ) { if (geometry::num_points(geometry1) == 0 && geometry::num_points(geometry2) == 0) { return out; } if (geometry::num_points(geometry1) == 0 || geometry::num_points(geometry2) == 0) { return return_if_one_input_is_empty < GeometryOut, Direction, ReverseOut >(geometry1, geometry2, out); } typedef typename geometry::point_type::type point_type; typedef detail::overlay::traversal_turn_info turn_info; typedef std::deque container_type; typedef std::deque < typename geometry::ring_type::type > ring_container_type; container_type turn_points; #ifdef BOOST_GEOMETRY_TIME_OVERLAY boost::timer timer; #endif #ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE std::cout << "get turns" << std::endl; #endif detail::get_turns::no_interrupt_policy policy; geometry::get_turns < Reverse1, Reverse2, detail::overlay::calculate_distance_policy >(geometry1, geometry2, turn_points, policy); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "get_turns: " << timer.elapsed() << std::endl; #endif #ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE std::cout << "enrich" << std::endl; #endif typename Strategy::side_strategy_type side_strategy; geometry::enrich_intersection_points(turn_points, Direction == overlay_union ? geometry::detail::overlay::operation_union : geometry::detail::overlay::operation_intersection, geometry1, geometry2, side_strategy); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "enrich_intersection_points: " << timer.elapsed() << std::endl; #endif #ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE std::cout << "traverse" << std::endl; #endif // Traverse through intersection/turn points and create rings of them. // Note that these rings are always in clockwise order, even in CCW polygons, // and are marked as "to be reversed" below ring_container_type rings; traverse::apply ( geometry1, geometry2, Direction == overlay_union ? geometry::detail::overlay::operation_union : geometry::detail::overlay::operation_intersection, turn_points, rings ); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "traverse: " << timer.elapsed() << std::endl; #endif std::map map; map_turns(map, turn_points); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "map_turns: " << timer.elapsed() << std::endl; #endif typedef ring_properties::type> properties; std::map selected; select_rings(geometry1, geometry2, map, selected, ! turn_points.empty()); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "select_rings: " << timer.elapsed() << std::endl; #endif // Add rings created during traversal { ring_identifier id(2, 0, -1); for (typename boost::range_iterator::type it = boost::begin(rings); it != boost::end(rings); ++it) { selected[id] = properties(*it, true); selected[id].reversed = ReverseOut; id.multi_index++; } } #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "add traversal rings: " << timer.elapsed() << std::endl; #endif assign_parents(geometry1, geometry2, rings, selected); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "assign_parents: " << timer.elapsed() << std::endl; #endif return add_rings(selected, geometry1, geometry2, rings, out); } }; // Metafunction helper for intersection and union template struct do_reverse {}; template <> struct do_reverse : boost::false_type {}; template <> struct do_reverse : boost::true_type {}; template <> struct do_reverse : boost::true_type {}; template <> struct do_reverse : boost::false_type {}; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_HPP overlay_type.hpp000444000765000024 134012161110621 30436 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_TYPE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_TYPE_HPP namespace boost { namespace geometry { enum overlay_type { overlay_union, overlay_intersection, overlay_difference, overlay_dissolve }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_TYPE_HPP ring_properties.hpp000444000765000024 375612161110666 31155 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RING_PROPERTIES_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RING_PROPERTIES_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template struct ring_properties { typedef Point point_type; typedef typename default_area_result::type area_type; // Filled by "select_rings" Point point; area_type area; // Filled by "update_selection_map" int within_code; bool reversed; // Filled/used by "assign_rings" bool discarded; ring_identifier parent; area_type parent_area; std::vector children; inline ring_properties() : area(area_type()) , within_code(-1) , reversed(false) , discarded(false) , parent_area(-1) {} template inline ring_properties(RingOrBox const& ring_or_box, bool midpoint) : within_code(-1) , reversed(false) , discarded(false) , parent_area(-1) { this->area = geometry::area(ring_or_box); geometry::point_on_border(this->point, ring_or_box, midpoint); } inline area_type get_area() const { return reversed ? -area : area; } }; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RING_PROPERTIES_HPP segment_identifier.hpp000444000765000024 515012161110675 31574 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SEGMENT_IDENTIFIER_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SEGMENT_IDENTIFIER_HPP #if defined(BOOST_GEOMETRY_DEBUG_OVERLAY) # define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER #endif #include #include #include namespace boost { namespace geometry { // Internal struct to uniquely identify a segment // on a linestring,ring // or polygon (needs ring_index) // or multi-geometry (needs multi_index) struct segment_identifier { inline segment_identifier() : source_index(-1) , multi_index(-1) , ring_index(-1) , segment_index(-1) {} inline segment_identifier(int src, int mul, int rin, int seg) : source_index(src) , multi_index(mul) , ring_index(rin) , segment_index(seg) {} inline bool operator<(segment_identifier const& other) const { return source_index != other.source_index ? source_index < other.source_index : multi_index !=other.multi_index ? multi_index < other.multi_index : ring_index != other.ring_index ? ring_index < other.ring_index : segment_index < other.segment_index ; } inline bool operator==(segment_identifier const& other) const { return source_index == other.source_index && segment_index == other.segment_index && ring_index == other.ring_index && multi_index == other.multi_index ; } #if defined(BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER) friend std::ostream& operator<<(std::ostream &os, segment_identifier const& seg_id) { std::cout << "s:" << seg_id.source_index << ", v:" << seg_id.segment_index // ~vertex ; if (seg_id.ring_index >= 0) std::cout << ", r:" << seg_id.ring_index; if (seg_id.multi_index >= 0) std::cout << ", m:" << seg_id.multi_index; return os; } #endif int source_index; int multi_index; int ring_index; int segment_index; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SEGMENT_IDENTIFIER_HPP select_rings.hpp000444000765000024 2261212161110635 30427 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { namespace dispatch { template struct select_rings {}; template struct select_rings { template static inline void apply(Box const& box, Geometry const& , ring_identifier const& id, Map& map, bool midpoint) { map[id] = typename Map::mapped_type(box, midpoint); } template static inline void apply(Box const& box, ring_identifier const& id, Map& map, bool midpoint) { map[id] = typename Map::mapped_type(box, midpoint); } }; template struct select_rings { template static inline void apply(Ring const& ring, Geometry const& , ring_identifier const& id, Map& map, bool midpoint) { if (boost::size(ring) > 0) { map[id] = typename Map::mapped_type(ring, midpoint); } } template static inline void apply(Ring const& ring, ring_identifier const& id, Map& map, bool midpoint) { if (boost::size(ring) > 0) { map[id] = typename Map::mapped_type(ring, midpoint); } } }; template struct select_rings { template static inline void apply(Polygon const& polygon, Geometry const& geometry, ring_identifier id, Map& map, bool midpoint) { typedef typename geometry::ring_type::type ring_type; typedef select_rings per_ring; per_ring::apply(exterior_ring(polygon), geometry, id, map, midpoint); typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { id.ring_index++; per_ring::apply(*it, geometry, id, map, midpoint); } } template static inline void apply(Polygon const& polygon, ring_identifier id, Map& map, bool midpoint) { typedef typename geometry::ring_type::type ring_type; typedef select_rings per_ring; per_ring::apply(exterior_ring(polygon), id, map, midpoint); typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { id.ring_index++; per_ring::apply(*it, id, map, midpoint); } } }; } template struct decide {}; template<> struct decide { template static bool include(ring_identifier const& , Code const& code) { return code.within_code * -1 == 1; } template static bool reversed(ring_identifier const& , Code const& ) { return false; } }; template<> struct decide { template static bool include(ring_identifier const& id, Code const& code) { bool is_first = id.source_index == 0; return code.within_code * -1 * (is_first ? 1 : -1) == 1; } template static bool reversed(ring_identifier const& id, Code const& code) { return include(id, code) && id.source_index == 1; } }; template<> struct decide { template static bool include(ring_identifier const& , Code const& code) { return code.within_code * 1 == 1; } template static bool reversed(ring_identifier const& , Code const& ) { return false; } }; template < overlay_type OverlayType, typename Geometry1, typename Geometry2, typename IntersectionMap, typename SelectionMap > inline void update_selection_map(Geometry1 const& geometry1, Geometry2 const& geometry2, IntersectionMap const& intersection_map, SelectionMap const& map_with_all, SelectionMap& selection_map) { selection_map.clear(); for (typename SelectionMap::const_iterator it = boost::begin(map_with_all); it != boost::end(map_with_all); ++it) { /* int union_code = it->second.within_code * -1; bool is_first = it->first.source_index == 0; std::cout << it->first << " " << it->second.area << ": " << it->second.within_code << " union: " << union_code << " intersection: " << (it->second.within_code * 1) << " G1-G2: " << (union_code * (is_first ? 1 : -1)) << " G2-G1: " << (union_code * (is_first ? -1 : 1)) << " -> " << (decide::include(it->first, it->second) ? "INC" : "") << decide::reverse(it->first, it->second) << std::endl; */ bool found = intersection_map.find(it->first) != intersection_map.end(); if (! found) { ring_identifier const id = it->first; typename SelectionMap::mapped_type properties = it->second; // Copy by value // Calculate the "within code" (previously this was done earlier but is // must efficienter here - it can be even more efficient doing it all at once, // using partition, TODO) // So though this is less elegant than before, it avoids many unused point-in-poly calculations switch(id.source_index) { case 0 : properties.within_code = geometry::within(properties.point, geometry2) ? 1 : -1; break; case 1 : properties.within_code = geometry::within(properties.point, geometry1) ? 1 : -1; break; } if (decide::include(id, properties)) { properties.reversed = decide::reversed(id, properties); selection_map[id] = properties; } } } } /*! \brief The function select_rings select rings based on the overlay-type (union,intersection) */ template < overlay_type OverlayType, typename Geometry1, typename Geometry2, typename IntersectionMap, typename SelectionMap > inline void select_rings(Geometry1 const& geometry1, Geometry2 const& geometry2, IntersectionMap const& intersection_map, SelectionMap& selection_map, bool midpoint) { typedef typename geometry::tag::type tag1; typedef typename geometry::tag::type tag2; SelectionMap map_with_all; dispatch::select_rings::apply(geometry1, geometry2, ring_identifier(0, -1, -1), map_with_all, midpoint); dispatch::select_rings::apply(geometry2, geometry1, ring_identifier(1, -1, -1), map_with_all, midpoint); update_selection_map(geometry1, geometry2, intersection_map, map_with_all, selection_map); } template < overlay_type OverlayType, typename Geometry, typename IntersectionMap, typename SelectionMap > inline void select_rings(Geometry const& geometry, IntersectionMap const& intersection_map, SelectionMap& selection_map, bool midpoint) { typedef typename geometry::tag::type tag; SelectionMap map_with_all; dispatch::select_rings::apply(geometry, ring_identifier(0, -1, -1), map_with_all, midpoint); update_selection_map(geometry, geometry, intersection_map, map_with_all, selection_map); } }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP self_turn_points.hpp000444000765000024 1646212161110617 31351 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace self_get_turn_points { struct no_interrupt_policy { static bool const enabled = false; static bool const has_intersections = false; template static inline bool apply(Range const&) { return false; } }; class self_ip_exception : public geometry::exception {}; template < typename Geometry, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct self_section_visitor { Geometry const& m_geometry; Turns& m_turns; InterruptPolicy& m_interrupt_policy; inline self_section_visitor(Geometry const& g, Turns& turns, InterruptPolicy& ip) : m_geometry(g) , m_turns(turns) , m_interrupt_policy(ip) {} template inline bool apply(Section const& sec1, Section const& sec2) { if (! detail::disjoint::disjoint_box_box(sec1.bounding_box, sec2.bounding_box) && ! sec1.duplicate && ! sec2.duplicate) { detail::get_turns::get_turns_in_sections < Geometry, Geometry, false, false, Section, Section, Turns, TurnPolicy, InterruptPolicy >::apply( 0, m_geometry, sec1, 0, m_geometry, sec2, false, m_turns, m_interrupt_policy); } if (m_interrupt_policy.has_intersections) { // TODO: we should give partition an interrupt policy. // Now we throw, and catch below, to stop the partition loop. throw self_ip_exception(); } return true; } }; template < typename Geometry, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns { static inline bool apply( Geometry const& geometry, Turns& turns, InterruptPolicy& interrupt_policy) { typedef model::box < typename geometry::point_type::type > box_type; typedef typename geometry::sections < box_type, 1 > sections_type; sections_type sec; geometry::sectionalize(geometry, sec); self_section_visitor < Geometry, Turns, TurnPolicy, InterruptPolicy > visitor(geometry, turns, interrupt_policy); try { geometry::partition < box_type, detail::get_turns::get_section_box, detail::get_turns::ovelaps_section_box >::apply(sec, visitor); } catch(self_ip_exception const& ) { return false; } return true; } }; }} // namespace detail::self_get_turn_points #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename GeometryTag, typename Geometry, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct self_get_turn_points { }; template < typename Ring, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct self_get_turn_points < ring_tag, Ring, Turns, TurnPolicy, InterruptPolicy > : detail::self_get_turn_points::get_turns < Ring, Turns, TurnPolicy, InterruptPolicy > {}; template < typename Box, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct self_get_turn_points < box_tag, Box, Turns, TurnPolicy, InterruptPolicy > { static inline bool apply( Box const& , Turns& , InterruptPolicy& ) { return true; } }; template < typename Polygon, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct self_get_turn_points < polygon_tag, Polygon, Turns, TurnPolicy, InterruptPolicy > : detail::self_get_turn_points::get_turns < Polygon, Turns, TurnPolicy, InterruptPolicy > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Calculate self intersections of a geometry \ingroup overlay \tparam Geometry geometry type \tparam Turns type of intersection container (e.g. vector of "intersection/turn point"'s) \param geometry geometry \param turns container which will contain intersection points \param interrupt_policy policy determining if process is stopped when intersection is found */ template < typename AssignPolicy, typename Geometry, typename Turns, typename InterruptPolicy > inline void self_turns(Geometry const& geometry, Turns& turns, InterruptPolicy& interrupt_policy) { concept::check(); typedef typename strategy_intersection < typename cs_tag::type, Geometry, Geometry, typename boost::range_value::type >::segment_intersection_strategy_type strategy_type; typedef detail::overlay::get_turn_info < typename point_type::type, typename point_type::type, typename boost::range_value::type, detail::overlay::assign_null_policy > TurnPolicy; dispatch::self_get_turn_points < typename tag::type, Geometry, Turns, TurnPolicy, InterruptPolicy >::apply(geometry, turns, interrupt_policy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP stream_info.hpp000444000765000024 425212161110601 30225 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_STREAM_INFO_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_STREAM_INFO_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { static inline std::string dir(int d) { return d == 0 ? "-" : (d == 1 ? "L" : d == -1 ? "R" : "#"); } static inline std::string how_str(int h) { return h == 0 ? "-" : (h == 1 ? "A" : "D"); } template std::ostream& operator<<(std::ostream &os, turn_info

const& info) { typename geometry::coordinate_type

::type d = info.distance; os << "\t" << " src " << info.seg_id.source_index << " seg " << info.seg_id.segment_index << " (// " << info.other_id.source_index << "." << info.other_id.segment_index << ")" << " how " << info.how << "[" << how_str(info.arrival) << " " << dir(info.direction) << (info.opposite ? " o" : "") << "]" << " sd " << dir(info.sides.get<0,0>()) << dir(info.sides.get<0,1>()) << dir(info.sides.get<1,0>()) << dir(info.sides.get<1,1>()) << " nxt seg " << info.travels_to_vertex_index << " , ip " << info.travels_to_ip_index << " , or " << info.next_ip_index << " dst " << double(d) << info.visit_state; if (info.flagged) { os << " FLAGGED"; } return os; } }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_STREAM_INFO_HPP traversal_info.hpp000444000765000024 242712161110650 30743 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_INFO_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_INFO_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template struct traversal_turn_operation : public turn_operation { enrichment_info

enriched; visit_info visited; }; template struct traversal_turn_info : public turn_info > {}; }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_INFO_HPP traverse.hpp000444000765000024 3653312161110610 27601 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP #include #include #include #include #include #include #include #include #include #include #include #if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) \ || defined(BOOST_GEOMETRY_OVERLAY_REPORT_WKT) \ || defined(BOOST_GEOMETRY_DEBUG_TRAVERSE) # include # include # include #endif namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template #ifdef BOOST_GEOMETRY_DEBUG_TRAVERSE inline void debug_traverse(Turn const& turn, Operation op, std::string const& header) { std::cout << header << " at " << op.seg_id << " meth: " << method_char(turn.method) << " op: " << operation_char(op.operation) << " vis: " << visited_char(op.visited) << " of: " << operation_char(turn.operations[0].operation) << operation_char(turn.operations[1].operation) << " " << geometry::wkt(turn.point) << std::endl; if (boost::contains(header, "Finished")) { std::cout << std::endl; } } #else inline void debug_traverse(Turn const& , Operation, std::string const& ) { } #endif template inline void set_visited_for_continue(Info& info, Turn const& turn) { // On "continue", set "visited" for ALL directions if (turn.operation == detail::overlay::operation_continue) { for (typename boost::range_iterator < typename Info::container_type >::type it = boost::begin(info.operations); it != boost::end(info.operations); ++it) { if (it->visited.none()) { it->visited.set_visited(); } } } } template < bool Reverse1, bool Reverse2, typename GeometryOut, typename G1, typename G2, typename Turns, typename IntersectionInfo > inline bool assign_next_ip(G1 const& g1, G2 const& g2, Turns& turns, typename boost::range_iterator::type& ip, GeometryOut& current_output, IntersectionInfo& info, segment_identifier& seg_id) { info.visited.set_visited(); set_visited_for_continue(*ip, info); // If there is no next IP on this segment if (info.enriched.next_ip_index < 0) { if (info.enriched.travels_to_vertex_index < 0 || info.enriched.travels_to_ip_index < 0) { return false; } BOOST_ASSERT(info.enriched.travels_to_vertex_index >= 0); BOOST_ASSERT(info.enriched.travels_to_ip_index >= 0); if (info.seg_id.source_index == 0) { geometry::copy_segments(g1, info.seg_id, info.enriched.travels_to_vertex_index, current_output); } else { geometry::copy_segments(g2, info.seg_id, info.enriched.travels_to_vertex_index, current_output); } seg_id = info.seg_id; ip = boost::begin(turns) + info.enriched.travels_to_ip_index; } else { ip = boost::begin(turns) + info.enriched.next_ip_index; seg_id = info.seg_id; } detail::overlay::append_no_duplicates(current_output, ip->point); return true; } inline bool select_source(operation_type operation, int source1, int source2) { return (operation == operation_intersection && source1 != source2) || (operation == operation_union && source1 == source2) ; } template < typename Turn, typename Iterator > inline bool select_next_ip(operation_type operation, Turn& turn, segment_identifier const& seg_id, Iterator& selected) { if (turn.discarded) { return false; } bool has_tp = false; selected = boost::end(turn.operations); for (Iterator it = boost::begin(turn.operations); it != boost::end(turn.operations); ++it) { if (it->visited.started()) { selected = it; //std::cout << " RETURN"; return true; } // In some cases there are two alternatives. // For "ii", take the other one (alternate) // UNLESS the other one is already visited // For "uu", take the same one (see above); // For "cc", take either one, but if there is a starting one, // take that one. if ( (it->operation == operation_continue && (! has_tp || it->visited.started() ) ) || (it->operation == operation && ! it->visited.finished() && (! has_tp || select_source(operation, it->seg_id.source_index, seg_id.source_index) ) ) ) { selected = it; debug_traverse(turn, *it, " Candidate"); has_tp = true; } } if (has_tp) { debug_traverse(turn, *selected, " Accepted"); } return has_tp; } /*! \brief Traverses through intersection points / geometries \ingroup overlay */ template < bool Reverse1, bool Reverse2, typename Geometry1, typename Geometry2, typename Backtrack = backtrack_check_self_intersections > class traverse { public : template static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2, detail::overlay::operation_type operation, Turns& turns, Rings& rings) { typedef typename boost::range_value::type ring_type; typedef typename boost::range_iterator::type turn_iterator; typedef typename boost::range_value::type turn_type; typedef typename boost::range_iterator < typename turn_type::container_type >::type turn_operation_iterator_type; std::size_t const min_num_points = core_detail::closure::minimum_ring_size < geometry::closure::value >::value; std::size_t size_at_start = boost::size(rings); typename Backtrack::state_type state; do { state.reset(); // Iterate through all unvisited points for (turn_iterator it = boost::begin(turns); state.good() && it != boost::end(turns); ++it) { // Skip discarded ones if (! (it->is_discarded() || it->blocked())) { for (turn_operation_iterator_type iit = boost::begin(it->operations); state.good() && iit != boost::end(it->operations); ++iit) { if (iit->visited.none() && ! iit->visited.rejected() && (iit->operation == operation || iit->operation == detail::overlay::operation_continue) ) { set_visited_for_continue(*it, *iit); ring_type current_output; detail::overlay::append_no_duplicates(current_output, it->point, true); turn_iterator current = it; turn_operation_iterator_type current_iit = iit; segment_identifier current_seg_id; if (! detail::overlay::assign_next_ip( geometry1, geometry2, turns, current, current_output, *iit, current_seg_id)) { Backtrack::apply( size_at_start, rings, current_output, turns, *current_iit, "No next IP", geometry1, geometry2, state); } if (! detail::overlay::select_next_ip( operation, *current, current_seg_id, current_iit)) { Backtrack::apply( size_at_start, rings, current_output, turns, *iit, "Dead end at start", geometry1, geometry2, state); } else { iit->visited.set_started(); detail::overlay::debug_traverse(*it, *iit, "-> Started"); detail::overlay::debug_traverse(*current, *current_iit, "Selected "); unsigned int i = 0; while (current_iit != iit && state.good()) { if (current_iit->visited.visited()) { // It visits a visited node again, without passing the start node. // This makes it suspicious for endless loops Backtrack::apply( size_at_start, rings, current_output, turns, *iit, "Visit again", geometry1, geometry2, state); } else { // We assume clockwise polygons only, non self-intersecting, closed. // However, the input might be different, and checking validity // is up to the library user. // Therefore we make here some sanity checks. If the input // violates the assumptions, the output polygon will not be correct // but the routine will stop and output the current polygon, and // will continue with the next one. // Below three reasons to stop. detail::overlay::assign_next_ip( geometry1, geometry2, turns, current, current_output, *current_iit, current_seg_id); if (! detail::overlay::select_next_ip( operation, *current, current_seg_id, current_iit)) { // Should not occur in valid (non-self-intersecting) polygons // Should not occur in self-intersecting polygons without spikes // Might occur in polygons with spikes Backtrack::apply( size_at_start, rings, current_output, turns, *iit, "Dead end", geometry1, geometry2, state); } detail::overlay::debug_traverse(*current, *current_iit, "Selected "); if (i++ > 2 + 2 * turns.size()) { // Sanity check: there may be never more loops // than turn points. // Turn points marked as "ii" can be visited twice. Backtrack::apply( size_at_start, rings, current_output, turns, *iit, "Endless loop", geometry1, geometry2, state); } } } if (state.good()) { iit->visited.set_finished(); detail::overlay::debug_traverse(*current, *iit, "->Finished"); if (geometry::num_points(current_output) >= min_num_points) { rings.push_back(current_output); } } } } } } } } while (! state.good()); } }; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP turn_info.hpp000444000765000024 726112161110654 27735 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TURN_INFO_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TURN_INFO_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { enum operation_type { operation_none, operation_union, operation_intersection, operation_blocked, operation_continue, operation_opposite }; enum method_type { method_none, method_disjoint, method_crosses, method_touch, method_touch_interior, method_collinear, method_equal, method_error }; /*! \brief Turn operation: operation \details Information necessary for traversal phase (a phase of the overlay process). The information is gathered during the get_turns (segment intersection) phase. The class is to be included in the turn_info class, either direct or a derived or similar class with more (e.g. enrichment) information. */ struct turn_operation { operation_type operation; segment_identifier seg_id; segment_identifier other_id; inline turn_operation() : operation(operation_none) {} }; /*! \brief Turn information: intersection point, method, and turn information \details Information necessary for traversal phase (a phase of the overlay process). The information is gathered during the get_turns (segment intersection) phase. \tparam Point point type of intersection point \tparam Operation gives classes opportunity to add additional info \tparam Container gives classes opportunity to define how operations are stored */ template < typename Point, typename Operation = turn_operation, typename Container = boost::array > struct turn_info { typedef Point point_type; typedef Operation turn_operation_type; typedef Container container_type; Point point; method_type method; bool discarded; Container operations; inline turn_info() : method(method_none) , discarded(false) {} inline bool both(operation_type type) const { return has12(type, type); } inline bool has(operation_type type) const { return this->operations[0].operation == type || this->operations[1].operation == type; } inline bool combination(operation_type type1, operation_type type2) const { return has12(type1, type2) || has12(type2, type1); } inline bool is_discarded() const { return discarded; } inline bool blocked() const { return both(operation_blocked); } inline bool opposite() const { return both(operation_opposite); } inline bool any_blocked() const { return has(operation_blocked); } private : inline bool has12(operation_type type1, operation_type type2) const { return this->operations[0].operation == type1 && this->operations[1].operation == type2 ; } }; }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TURN_INFO_HPP visit_info.hpp000444000765000024 651012161110651 30074 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP #ifdef BOOST_GEOMETRY_USE_MSM # include #endif namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { #if ! defined(BOOST_GEOMETRY_USE_MSM) class visit_info { private : static const int NONE = 0; static const int STARTED = 1; static const int VISITED = 2; static const int FINISHED = 3; static const int REJECTED = 4; int m_visit_code; bool m_rejected; public: inline visit_info() : m_visit_code(0) , m_rejected(false) {} inline void set_visited() { m_visit_code = VISITED; } inline void set_started() { m_visit_code = STARTED; } inline void set_finished() { m_visit_code = FINISHED; } inline void set_rejected() { m_visit_code = REJECTED; m_rejected = true; } inline bool none() const { return m_visit_code == NONE; } inline bool visited() const { return m_visit_code == VISITED; } inline bool started() const { return m_visit_code == STARTED; } inline bool finished() const { return m_visit_code == FINISHED; } inline bool rejected() const { return m_rejected; } inline void clear() { if (! rejected()) { m_visit_code = NONE; } } #ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION friend std::ostream& operator<<(std::ostream &os, visit_info const& v) { if (v.m_visit_code != 0) { os << " VIS: " << int(v.m_visit_code); } return os; } #endif }; #else class visit_info { private : #ifndef USE_MSM_MINI mutable #endif traverse_state state; public : inline visit_info() { state.start(); } inline void set_none() { state.process_event(none()); } // Not Yet Implemented! inline void set_visited() { state.process_event(visit()); } inline void set_started() { state.process_event(starting()); } inline void set_finished() { state.process_event(finish()); } #ifdef USE_MSM_MINI inline bool none() const { return state.flag_none(); } inline bool visited() const { return state.flag_visited(); } inline bool started() const { return state.flag_started(); } #else inline bool none() const { return state.is_flag_active(); } inline bool visited() const { return state.is_flag_active(); } inline bool started() const { return state.is_flag_active(); } #endif #ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION friend std::ostream& operator<<(std::ostream &os, visit_info const& v) { return os; } #endif }; #endif }} // namespace detail::overlay #endif //DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP sections000755000765000024 012161110647 25226 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detailrange_by_section.hpp000444000765000024 661512161110647 31416 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/sections// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace section { template struct full_section_range { static inline Range const& apply(Range const& range, Section const& ) { return range; } }; template struct full_section_polygon { static inline typename ring_return_type::type apply(Polygon const& polygon, Section const& section) { return section.ring_id.ring_index < 0 ? geometry::exterior_ring(polygon) : geometry::interior_rings(polygon)[section.ring_id.ring_index]; } }; }} // namespace detail::section #endif #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Tag, typename Geometry, typename Section > struct range_by_section { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct range_by_section : detail::section::full_section_range {}; template struct range_by_section : detail::section::full_section_range {}; template struct range_by_section : detail::section::full_section_polygon {}; } // namespace dispatch #endif /*! \brief Get full ring (exterior, one of interiors, one from multi) indicated by the specified section \ingroup sectionalize \tparam Geometry type \tparam Section type of section to get from \param geometry geometry to take section of \param section structure with section */ template inline typename ring_return_type::type range_by_section(Geometry const& geometry, Section const& section) { concept::check(); return dispatch::range_by_section < typename tag::type, Geometry, Section >::apply(geometry, section); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP sectionalize.hpp000444000765000024 4406512161110612 30606 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/algorithms/detail/sections// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Structure containing section information \details Section information consists of a bounding box, direction information (if it is increasing or decreasing, per dimension), index information (begin-end, ring, multi) and the number of segments in this section \tparam Box box-type \tparam DimensionCount number of dimensions for this section \ingroup sectionalize */ template struct section { typedef Box box_type; int id; // might be obsolete now, BSG 14-03-2011 TODO decide about this int directions[DimensionCount]; ring_identifier ring_id; Box bounding_box; int begin_index; int end_index; std::size_t count; std::size_t range_count; bool duplicate; int non_duplicate_index; inline section() : id(-1) , begin_index(-1) , end_index(-1) , count(0) , range_count(0) , duplicate(false) , non_duplicate_index(-1) { assign_inverse(bounding_box); for (register std::size_t i = 0; i < DimensionCount; i++) { directions[i] = 0; } } }; /*! \brief Structure containing a collection of sections \note Derived from a vector, proves to be faster than of deque \note vector might be templated in the future \ingroup sectionalize */ template struct sections : std::vector > { typedef Box box_type; static std::size_t const value = DimensionCount; }; #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace sectionalize { template struct get_direction_loop { typedef typename coordinate_type::type coordinate_type; static inline void apply(Segment const& seg, int directions[DimensionCount]) { coordinate_type const diff = geometry::get<1, Dimension>(seg) - geometry::get<0, Dimension>(seg); coordinate_type zero = coordinate_type(); directions[Dimension] = diff > zero ? 1 : diff < zero ? -1 : 0; get_direction_loop < Segment, Dimension + 1, DimensionCount >::apply(seg, directions); } }; template struct get_direction_loop { static inline void apply(Segment const&, int [DimensionCount]) {} }; template struct copy_loop { static inline void apply(T const source[DimensionCount], T target[DimensionCount]) { target[Dimension] = source[Dimension]; copy_loop::apply(source, target); } }; template struct copy_loop { static inline void apply(T const [DimensionCount], T [DimensionCount]) {} }; template struct compare_loop { static inline bool apply(T const source[DimensionCount], T const target[DimensionCount]) { bool const not_equal = target[Dimension] != source[Dimension]; return not_equal ? false : compare_loop < T, Dimension + 1, DimensionCount >::apply(source, target); } }; template struct compare_loop { static inline bool apply(T const [DimensionCount], T const [DimensionCount]) { return true; } }; template struct check_duplicate_loop { typedef typename coordinate_type::type coordinate_type; static inline bool apply(Segment const& seg) { if (! geometry::math::equals ( geometry::get<0, Dimension>(seg), geometry::get<1, Dimension>(seg) ) ) { return false; } return check_duplicate_loop < Segment, Dimension + 1, DimensionCount >::apply(seg); } }; template struct check_duplicate_loop { static inline bool apply(Segment const&) { return true; } }; template struct assign_loop { static inline void apply(T dims[DimensionCount], int const value) { dims[Dimension] = value; assign_loop::apply(dims, value); } }; template struct assign_loop { static inline void apply(T [DimensionCount], int const) { } }; /// @brief Helper class to create sections of a part of a range, on the fly template < typename Range, // Can be closeable_view typename Point, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize_part { typedef model::referring_segment segment_type; typedef typename boost::range_value::type section_type; typedef typename boost::range_iterator::type iterator_type; static inline void apply(Sections& sections, section_type& section, int& index, int& ndi, Range const& range, ring_identifier ring_id) { if (int(boost::size(range)) <= index) { return; } if (index == 0) { ndi = 0; } iterator_type it = boost::begin(range); it += index; for(iterator_type previous = it++; it != boost::end(range); ++previous, ++it, index++) { segment_type segment(*previous, *it); int direction_classes[DimensionCount] = {0}; get_direction_loop < segment_type, 0, DimensionCount >::apply(segment, direction_classes); // if "dir" == 0 for all point-dimensions, it is duplicate. // Those sections might be omitted, if wished, lateron bool duplicate = false; if (direction_classes[0] == 0) { // Recheck because ALL dimensions should be checked, // not only first one. // (DimensionCount might be < dimension

::value) if (check_duplicate_loop < segment_type, 0, geometry::dimension::type::value >::apply(segment) ) { duplicate = true; // Change direction-info to force new section // Note that wo consecutive duplicate segments will generate // only one duplicate-section. // Actual value is not important as long as it is not -1,0,1 assign_loop < int, 0, DimensionCount >::apply(direction_classes, -99); } } if (section.count > 0 && (!compare_loop < int, 0, DimensionCount >::apply(direction_classes, section.directions) || section.count > MaxCount ) ) { sections.push_back(section); section = section_type(); } if (section.count == 0) { section.begin_index = index; section.ring_id = ring_id; section.duplicate = duplicate; section.non_duplicate_index = ndi; section.range_count = boost::size(range); copy_loop < int, 0, DimensionCount >::apply(direction_classes, section.directions); geometry::expand(section.bounding_box, *previous); } geometry::expand(section.bounding_box, *it); section.end_index = index + 1; section.count++; if (! duplicate) { ndi++; } } } }; template < typename Range, closure_selector Closure, bool Reverse, typename Point, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize_range { typedef typename closeable_view::type cview_type; typedef typename reversible_view < cview_type const, Reverse ? iterate_reverse : iterate_forward >::type view_type; static inline void apply(Range const& range, Sections& sections, ring_identifier ring_id) { typedef model::referring_segment segment_type; cview_type cview(range); view_type view(cview); std::size_t const n = boost::size(view); if (n == 0) { // Zero points, no section return; } if (n == 1) { // Line with one point ==> no sections return; } int index = 0; int ndi = 0; // non duplicate index typedef typename boost::range_value::type section_type; section_type section; sectionalize_part < view_type, Point, Sections, DimensionCount, MaxCount >::apply(sections, section, index, ndi, view, ring_id); // Add last section if applicable if (section.count > 0) { sections.push_back(section); } } }; template < typename Polygon, bool Reverse, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize_polygon { static inline void apply(Polygon const& poly, Sections& sections, ring_identifier ring_id) { typedef typename point_type::type point_type; typedef typename ring_type::type ring_type; typedef sectionalize_range < ring_type, closure::value, Reverse, point_type, Sections, DimensionCount, MaxCount > sectionalizer_type; ring_id.ring_index = -1; sectionalizer_type::apply(exterior_ring(poly), sections, ring_id);//-1, multi_index); ring_id.ring_index++; typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it, ++ring_id.ring_index) { sectionalizer_type::apply(*it, sections, ring_id); } } }; template < typename Box, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize_box { static inline void apply(Box const& box, Sections& sections, ring_identifier const& ring_id) { typedef typename point_type::type point_type; assert_dimension(); // Add all four sides of the 2D-box as separate section. // Easiest is to convert it to a polygon. // However, we don't have the polygon type // (or polygon would be a helper-type). // Therefore we mimic a linestring/std::vector of 5 points // TODO: might be replaced by assign_box_corners_oriented // or just "convert" point_type ll, lr, ul, ur; geometry::detail::assign_box_corners(box, ll, lr, ul, ur); std::vector points; points.push_back(ll); points.push_back(ul); points.push_back(ur); points.push_back(lr); points.push_back(ll); sectionalize_range < std::vector, closed, false, point_type, Sections, DimensionCount, MaxCount >::apply(points, sections, ring_id); } }; template inline void set_section_unique_ids(Sections& sections) { // Set ID's. int index = 0; for (typename boost::range_iterator::type it = boost::begin(sections); it != boost::end(sections); ++it) { it->id = index++; } } }} // namespace detail::sectionalize #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename Tag, typename Geometry, bool Reverse, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template < typename Box, bool Reverse, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize : detail::sectionalize::sectionalize_box < Box, Sections, DimensionCount, MaxCount > {}; template < typename LineString, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize < linestring_tag, LineString, false, Sections, DimensionCount, MaxCount > : detail::sectionalize::sectionalize_range < LineString, closed, false, typename point_type::type, Sections, DimensionCount, MaxCount > {}; template < typename Ring, bool Reverse, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize : detail::sectionalize::sectionalize_range < Ring, geometry::closure::value, Reverse, typename point_type::type, Sections, DimensionCount, MaxCount > {}; template < typename Polygon, bool Reverse, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize : detail::sectionalize::sectionalize_polygon < Polygon, Reverse, Sections, DimensionCount, MaxCount > {}; } // namespace dispatch #endif /*! \brief Split a geometry into monotonic sections \ingroup sectionalize \tparam Geometry type of geometry to check \tparam Sections type of sections to create \param geometry geometry to create sections from \param sections structure with sections \param source_index index to assign to the ring_identifiers */ template inline void sectionalize(Geometry const& geometry, Sections& sections, int source_index = 0) { concept::check(); // TODO: review use of this constant (see below) as causing problems with GCC 4.6 --mloskot // A maximum of 10 segments per section seems to give the fastest results //static std::size_t const max_segments_per_section = 10; typedef dispatch::sectionalize < typename tag::type, Geometry, Reverse, Sections, Sections::value, 10 // TODO: max_segments_per_section > sectionalizer_type; sections.clear(); ring_identifier ring_id; ring_id.source_index = source_index; sectionalizer_type::apply(geometry, sections, ring_id); detail::sectionalize::set_section_unique_ids(sections); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP arithmetic000755000765000024 012161110675 22116 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometryarithmetic.hpp000444000765000024 1767612161110612 25145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/arithmetic// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ARITHMETIC_ARITHMETIC_HPP #define BOOST_GEOMETRY_ARITHMETIC_ARITHMETIC_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct param { typedef typename boost::call_traits < typename coordinate_type

::type >::param_type type; }; template class Function> struct value_operation { C m_value; inline value_operation(C const &value) : m_value(value) {} template inline void apply(P& point) const { set(point, Function()(get(point), m_value)); } }; template class Function> struct point_operation { typedef typename coordinate_type::type coordinate_type; PointSrc const& m_source_point; inline point_operation(PointSrc const& point) : m_source_point(point) {} template inline void apply(PointDst& dest_point) const { set(dest_point, Function()(get(dest_point), get(m_source_point))); } }; template struct value_assignment { C m_value; inline value_assignment(C const &value) : m_value(value) {} template inline void apply(P& point) const { set(point, m_value); } }; template struct point_assignment { PointSrc const& m_source_point; inline point_assignment(PointSrc const& point) : m_source_point(point) {} template inline void apply(PointDst& dest_point) const { set(dest_point, get(m_source_point)); } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL /*! \brief Adds the same value to each coordinate of a point \ingroup arithmetic \details \param p point \param value value to add */ template inline void add_value(Point& p, typename detail::param::type value) { BOOST_CONCEPT_ASSERT( (concept::Point) ); for_each_coordinate(p, detail::value_operation::type, std::plus>(value)); } /*! \brief Adds a point to another \ingroup arithmetic \details The coordinates of the second point will be added to those of the first point. The second point is not modified. \param p1 first point \param p2 second point */ template inline void add_point(Point1& p1, Point2 const& p2) { BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); for_each_coordinate(p1, detail::point_operation(p2)); } /*! \brief Subtracts the same value to each coordinate of a point \ingroup arithmetic \details \param p point \param value value to subtract */ template inline void subtract_value(Point& p, typename detail::param::type value) { BOOST_CONCEPT_ASSERT( (concept::Point) ); for_each_coordinate(p, detail::value_operation::type, std::minus>(value)); } /*! \brief Subtracts a point to another \ingroup arithmetic \details The coordinates of the second point will be subtracted to those of the first point. The second point is not modified. \param p1 first point \param p2 second point */ template inline void subtract_point(Point1& p1, Point2 const& p2) { BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); for_each_coordinate(p1, detail::point_operation(p2)); } /*! \brief Multiplies each coordinate of a point by the same value \ingroup arithmetic \details \param p point \param value value to multiply by */ template inline void multiply_value(Point& p, typename detail::param::type value) { BOOST_CONCEPT_ASSERT( (concept::Point) ); for_each_coordinate(p, detail::value_operation::type, std::multiplies>(value)); } /*! \brief Multiplies a point by another \ingroup arithmetic \details The coordinates of the first point will be multiplied by those of the second point. The second point is not modified. \param p1 first point \param p2 second point \note This is *not* a dot, cross or wedge product. It is a mere field-by-field multiplication. */ template inline void multiply_point(Point1& p1, Point2 const& p2) { BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); for_each_coordinate(p1, detail::point_operation(p2)); } /*! \brief Divides each coordinate of the same point by a value \ingroup arithmetic \details \param p point \param value value to divide by */ template inline void divide_value(Point& p, typename detail::param::type value) { BOOST_CONCEPT_ASSERT( (concept::Point) ); for_each_coordinate(p, detail::value_operation::type, std::divides>(value)); } /*! \brief Divides a point by another \ingroup arithmetic \details The coordinates of the first point will be divided by those of the second point. The second point is not modified. \param p1 first point \param p2 second point */ template inline void divide_point(Point1& p1, Point2 const& p2) { BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); for_each_coordinate(p1, detail::point_operation(p2)); } /*! \brief Assign each coordinate of a point the same value \ingroup arithmetic \details \param p point \param value value to assign */ template inline void assign_value(Point& p, typename detail::param::type value) { BOOST_CONCEPT_ASSERT( (concept::Point) ); for_each_coordinate(p, detail::value_assignment::type>(value)); } /*! \brief Assign a point with another \ingroup arithmetic \details The coordinates of the first point will be assigned those of the second point. The second point is not modified. \param p1 first point \param p2 second point */ template inline void assign_point(Point1& p1, const Point2& p2) { BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); for_each_coordinate(p1, detail::point_assignment(p2)); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ARITHMETIC_ARITHMETIC_HPP determinant.hpp000444000765000024 417412161110675 25304 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/arithmetic// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP #define BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template class calculate_determinant { template static inline ReturnType rt(T const& v) { return boost::numeric_cast(v); } public : static inline ReturnType apply(U const& ux, U const& uy , V const& vx, V const& vy) { return rt(ux) * rt(vy) - rt(uy) * rt(vx); } }; template inline ReturnType determinant(U const& ux, U const& uy , V const& vx, V const& vy) { return calculate_determinant < ReturnType, U, V >::apply(ux, uy, vx, vy); } template inline ReturnType determinant(U const& u, V const& v) { BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); return calculate_determinant < ReturnType, typename geometry::coordinate_type::type, typename geometry::coordinate_type::type >::apply(get<0>(u), get<1>(u), get<0>(v), get<1>(v)); } } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP dot_product.hpp000444000765000024 473512161110660 25315 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/arithmetic// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ARITHMETIC_DOT_PRODUCT_HPP #define BOOST_GEOMETRY_ARITHMETIC_DOT_PRODUCT_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct dot_product_maker { typedef typename select_coordinate_type::type coordinate_type; static inline coordinate_type apply(P1 const& p1, P2 const& p2) { return get(p1) * get(p2) + dot_product_maker::apply(p1, p2); } }; template struct dot_product_maker { typedef typename select_coordinate_type::type coordinate_type; static inline coordinate_type apply(P1 const& p1, P2 const& p2) { return get(p1) * get(p2); } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL /*! \brief Computes the dot product (or scalar product) of 2 vectors (points). \ingroup arithmetic \param p1 first point \param p2 second point \return the dot product */ template inline typename select_coordinate_type::type dot_product( P1 const& p1, P2 const& p2) { BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); return detail::dot_product_maker < P1, P2, 0, dimension::type::value - 1 >::apply(p1, p2); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ARITHMETIC_DOT_PRODUCT_HPP core000755000765000024 012161110677 20717 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometryaccess.hpp000444000765000024 2560512161110601 23041 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_ACCESS_HPP #define BOOST_GEOMETRY_CORE_ACCESS_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { /// Index of minimum corner of the box. int const min_corner = 0; /// Index of maximum corner of the box. int const max_corner = 1; namespace traits { /*! \brief Traits class which gives access (get,set) to points. \ingroup traits \par Geometries: /// @li point \par Specializations should provide, per Dimension /// @li static inline T get(G const&) /// @li static inline void set(G&, T const&) \tparam Geometry geometry-type \tparam Dimension dimension to access */ template struct access { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types) ); }; /*! \brief Traits class defining "get" and "set" to get and set point coordinate values \tparam Geometry geometry (box, segment) \tparam Index index (min_corner/max_corner for box, 0/1 for segment) \tparam Dimension dimension \par Geometries: - box - segment \par Specializations should provide: - static inline T get(G const&) - static inline void set(G&, T const&) \ingroup traits */ template struct indexed_access {}; } // namespace traits #ifndef DOXYGEN_NO_DETAIL namespace detail { template < typename Geometry, typename CoordinateType, std::size_t Index, std::size_t Dimension > struct indexed_access_non_pointer { static inline CoordinateType get(Geometry const& geometry) { return traits::indexed_access::get(geometry); } static inline void set(Geometry& b, CoordinateType const& value) { traits::indexed_access::set(b, value); } }; template < typename Geometry, typename CoordinateType, std::size_t Index, std::size_t Dimension > struct indexed_access_pointer { static inline CoordinateType get(Geometry const* geometry) { return traits::indexed_access::type, Index, Dimension>::get(*geometry); } static inline void set(Geometry* geometry, CoordinateType const& value) { traits::indexed_access::type, Index, Dimension>::set(*geometry, value); } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template < typename Tag, typename Geometry, typename CoordinateType, std::size_t Dimension, typename IsPointer > struct access { //static inline T get(G const&) {} //static inline void set(G& g, T const& value) {} }; template < typename Tag, typename Geometry, typename CoordinateType, std::size_t Index, std::size_t Dimension, typename IsPointer > struct indexed_access { //static inline T get(G const&) {} //static inline void set(G& g, T const& value) {} }; template struct access { static inline CoordinateType get(Point const& point) { return traits::access::get(point); } static inline void set(Point& p, CoordinateType const& value) { traits::access::set(p, value); } }; template struct access { static inline CoordinateType get(Point const* point) { return traits::access::type, Dimension>::get(*point); } static inline void set(Point* p, CoordinateType const& value) { traits::access::type, Dimension>::set(*p, value); } }; template < typename Box, typename CoordinateType, std::size_t Index, std::size_t Dimension > struct indexed_access : detail::indexed_access_non_pointer {}; template < typename Box, typename CoordinateType, std::size_t Index, std::size_t Dimension > struct indexed_access : detail::indexed_access_pointer {}; template < typename Segment, typename CoordinateType, std::size_t Index, std::size_t Dimension > struct indexed_access : detail::indexed_access_non_pointer {}; template < typename Segment, typename CoordinateType, std::size_t Index, std::size_t Dimension > struct indexed_access : detail::indexed_access_pointer {}; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH #ifndef DOXYGEN_NO_DETAIL namespace detail { // Two dummy tags to distinguish get/set variants below. // They don't have to be specified by the user. The functions are distinguished // by template signature also, but for e.g. GCC this is not enough. So give them // a different signature. struct signature_getset_dimension {}; struct signature_getset_index_dimension {}; } // namespace detail #endif // DOXYGEN_NO_DETAIL /*! \brief Get coordinate value of a geometry (usually a point) \details \details_get_set \ingroup get \tparam Dimension \tparam_dimension_required \tparam Geometry \tparam_geometry (usually a Point Concept) \param geometry \param_geometry (usually a point) \param dummy \qbk_skip \return The coordinate value of specified dimension of specified geometry \qbk{[include reference/core/get_point.qbk]} */ template inline typename coordinate_type::type get(Geometry const& geometry , detail::signature_getset_dimension* dummy = 0 ) { boost::ignore_unused_variable_warning(dummy); typedef core_dispatch::access < typename tag::type, typename geometry::util::bare_type::type, typename coordinate_type::type, Dimension, typename boost::is_pointer::type > coord_access_type; return coord_access_type::get(geometry); } /*! \brief Set coordinate value of a geometry (usually a point) \details \details_get_set \tparam Dimension \tparam_dimension_required \tparam Geometry \tparam_geometry (usually a Point Concept) \param geometry geometry to assign coordinate to \param geometry \param_geometry (usually a point) \param value The coordinate value to set \param dummy \qbk_skip \ingroup set \qbk{[include reference/core/set_point.qbk]} */ template inline void set(Geometry& geometry , typename coordinate_type::type const& value , detail::signature_getset_dimension* dummy = 0 ) { boost::ignore_unused_variable_warning(dummy); typedef core_dispatch::access < typename tag::type, typename geometry::util::bare_type::type, typename coordinate_type::type, Dimension, typename boost::is_pointer::type > coord_access_type; coord_access_type::set(geometry, value); } /*! \brief get coordinate value of a Box or Segment \details \details_get_set \tparam Index \tparam_index_required \tparam Dimension \tparam_dimension_required \tparam Geometry \tparam_box_or_segment \param geometry \param_geometry \param dummy \qbk_skip \return coordinate value \ingroup get \qbk{distinguish,with index} \qbk{[include reference/core/get_box.qbk]} */ template inline typename coordinate_type::type get(Geometry const& geometry , detail::signature_getset_index_dimension* dummy = 0 ) { boost::ignore_unused_variable_warning(dummy); typedef core_dispatch::indexed_access < typename tag::type, typename geometry::util::bare_type::type, typename coordinate_type::type, Index, Dimension, typename boost::is_pointer::type > coord_access_type; return coord_access_type::get(geometry); } /*! \brief set coordinate value of a Box / Segment \details \details_get_set \tparam Index \tparam_index_required \tparam Dimension \tparam_dimension_required \tparam Geometry \tparam_box_or_segment \param geometry geometry to assign coordinate to \param geometry \param_geometry \param value The coordinate value to set \param dummy \qbk_skip \ingroup set \qbk{distinguish,with index} \qbk{[include reference/core/set_box.qbk]} */ template inline void set(Geometry& geometry , typename coordinate_type::type const& value , detail::signature_getset_index_dimension* dummy = 0 ) { boost::ignore_unused_variable_warning(dummy); typedef core_dispatch::indexed_access < typename tag::type, typename geometry::util::bare_type::type, typename coordinate_type::type, Index, Dimension, typename boost::is_pointer::type > coord_access_type; coord_access_type::set(geometry, value); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_ACCESS_HPP closure.hpp000444000765000024 1120712161110617 23254 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_CLOSURE_HPP #define BOOST_GEOMETRY_CORE_CLOSURE_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Enumerates options for defining if polygons are open or closed \ingroup enum \details The enumeration closure_selector describes options for if a polygon is open or closed. In a closed polygon the very first point (per ring) should be equal to the very last point. The specific closing property of a polygon type is defined by the closure metafunction. The closure metafunction defines a value, which is one of the values enumerated in the closure_selector \qbk{ [heading See also] [link geometry.reference.core.closure The closure metafunction] } */ enum closure_selector { /// Rings are open: first point and last point are different, algorithms /// close them explicitly on the fly open = 0, /// Rings are closed: first point and last point must be the same closed = 1, /// (Not yet implemented): algorithms first figure out if ring must be /// closed on the fly closure_undertermined = -1 }; namespace traits { /*! \brief Traits class indicating if points within a ring or (multi)polygon are closed (last point == first point), open or not known. \ingroup traits \par Geometries: - ring \tparam G geometry */ template struct closure { static const closure_selector value = closed; }; } // namespace traits #ifndef DOXYGEN_NO_DETAIL namespace core_detail { namespace closure { struct closed { static const closure_selector value = geometry::closed; }; /// Metafunction to define the minimum size of a ring: /// 3 for open rings, 4 for closed rings template struct minimum_ring_size {}; template <> struct minimum_ring_size : boost::mpl::int_<4> {}; template <> struct minimum_ring_size : boost::mpl::int_<3> {}; }} // namespace detail::point_order #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct closure { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct closure : public core_detail::closure::closed {}; template struct closure : public core_detail::closure::closed {}; template struct closure : public core_detail::closure::closed {}; template struct closure : public core_detail::closure::closed {}; template struct closure { static const closure_selector value = geometry::traits::closure::value; }; // Specialization for polygon: the closure is the closure of its rings template struct closure { static const closure_selector value = core_dispatch::closure < ring_tag, typename ring_type::type >::value ; }; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_meta{value, closure (clockwise\, counterclockwise), \meta_geometry_type} \tparam Geometry \tparam_geometry \ingroup core \qbk{[include reference/core/closure.qbk]} */ template struct closure { static const closure_selector value = core_dispatch::closure < typename tag::type, typename boost::remove_const::type >::value; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_CLOSURE_HPP coordinate_dimension.hpp000444000765000024 674012161110604 25756 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_COORDINATE_DIMENSION_HPP #define BOOST_GEOMETRY_CORE_COORDINATE_DIMENSION_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class indicating the number of dimensions of a point \par Geometries: - point \par Specializations should provide: - value (should be derived from boost::mpl::int_ \ingroup traits */ template struct dimension { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types) ); }; } // namespace traits #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { // Base class derive from its own specialization of point-tag template struct dimension : dimension::type> {}; template struct dimension : traits::dimension::type> {}; } // namespace core_dispatch #endif /*! \brief \brief_meta{value, number of coordinates (the number of axes of any geometry), \meta_point_type} \tparam Geometry \tparam_geometry \ingroup core \qbk{[include reference/core/coordinate_dimension.qbk]} */ template struct dimension : core_dispatch::dimension < typename tag::type, typename geometry::util::bare_type::type > {}; /*! \brief assert_dimension, enables compile-time checking if coordinate dimensions are as expected \ingroup utility */ template inline void assert_dimension() { BOOST_STATIC_ASSERT(( boost::mpl::equal_to < geometry::dimension, boost::mpl::int_ >::type::value )); } /*! \brief assert_dimension, enables compile-time checking if coordinate dimensions are as expected \ingroup utility */ template inline void assert_dimension_less_equal() { BOOST_STATIC_ASSERT(( dimension::type::value <= Dimensions )); } template inline void assert_dimension_greater_equal() { BOOST_STATIC_ASSERT(( dimension::type::value >= Dimensions )); } /*! \brief assert_dimension_equal, enables compile-time checking if coordinate dimensions of two geometries are equal \ingroup utility */ template inline void assert_dimension_equal() { BOOST_STATIC_ASSERT(( dimension::type::value == dimension::type::value )); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_COORDINATE_DIMENSION_HPP coordinate_system.hpp000444000765000024 477112161110657 25327 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_COORDINATE_SYSTEM_HPP #define BOOST_GEOMETRY_CORE_COORDINATE_SYSTEM_HPP #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class defining the coordinate system of a point, important for strategy selection \ingroup traits \par Geometries: - point \par Specializations should provide: - typedef CS type; (cs::cartesian, cs::spherical, etc) */ template struct coordinate_system { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types) ); }; } // namespace traits #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct coordinate_system { typedef typename point_type::type P; // Call its own specialization on point-tag typedef typename coordinate_system::type type; }; template struct coordinate_system { typedef typename traits::coordinate_system < typename geometry::util::bare_type::type >::type type; }; } // namespace core_dispatch #endif /*! \brief \brief_meta{type, coordinate system (cartesian\, spherical\, etc), \meta_point_type} \tparam Geometry \tparam_geometry \ingroup core \qbk{[include reference/core/coordinate_system.qbk]} */ template struct coordinate_system { typedef typename core_dispatch::coordinate_system < typename tag::type, typename geometry::util::bare_type::type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_COORDINATE_SYSTEM_HPP coordinate_type.hpp000444000765000024 534512161110610 24747 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_COORDINATE_TYPE_HPP #define BOOST_GEOMETRY_CORE_COORDINATE_TYPE_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class which indicate the coordinate type (double,float,...) of a point \ingroup traits \par Geometries: - point \par Specializations should provide: - typedef T type; (double,float,int,etc) */ template struct coordinate_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types) ); }; } // namespace traits #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct coordinate_type { typedef typename point_type::type point_type; // Call its own specialization on point-tag typedef typename coordinate_type::type type; }; template struct coordinate_type { typedef typename traits::coordinate_type < typename geometry::util::bare_type::type >::type type; }; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_meta{type, coordinate type (int\, float\, double\, etc), \meta_point_type} \tparam Geometry \tparam_geometry \ingroup core \qbk{[include reference/core/coordinate_type.qbk]} */ template struct coordinate_type { typedef typename core_dispatch::coordinate_type < typename tag::type, typename geometry::util::bare_type::type >::type type; }; template struct fp_coordinate_type { typedef typename promote_floating_point < typename coordinate_type::type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_COORDINATE_TYPE_HPP cs.hpp000444000765000024 1301112161110642 22176 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_CS_HPP #define BOOST_GEOMETRY_CORE_CS_HPP #include #include #include #include namespace boost { namespace geometry { /*! \brief Unit of plane angle: Degrees \details Tag defining the unit of plane angle for spherical coordinate systems. This tag specifies that coordinates are defined in degrees (-180 .. 180). It has to be specified for some coordinate systems. \qbk{[include reference/core/degree_radian.qbk]} */ struct degree {}; /*! \brief Unit of plane angle: Radians \details Tag defining the unit of plane angle for spherical coordinate systems. This tag specifies that coordinates are defined in radians (-PI .. PI). It has to be specified for some coordinate systems. \qbk{[include reference/core/degree_radian.qbk]} */ struct radian {}; namespace cs { /*! \brief Cartesian coordinate system \details Defines the Cartesian or rectangular coordinate system where points are defined in 2 or 3 (or more) dimensions and usually (but not always) known as x,y,z \see http://en.wikipedia.org/wiki/Cartesian_coordinate_system \ingroup cs */ struct cartesian {}; /*! \brief Geographic coordinate system, in degree or in radian \details Defines the geographic coordinate system where points are defined in two angles and usually known as lat,long or lo,la or phi,lambda \see http://en.wikipedia.org/wiki/Geographic_coordinate_system \ingroup cs \note might be moved to extensions/gis/geographic */ template struct geographic { typedef DegreeOrRadian units; }; /*! \brief Spherical (polar) coordinate system, in degree or in radian \details Defines the spherical coordinate system where points are defined in two angles and an optional radius usually known as r, theta, phi \par Coordinates: - coordinate 0: 0 <= phi < 2pi is the angle between the positive x-axis and the line from the origin to the P projected onto the xy-plane. - coordinate 1: 0 <= theta <= pi is the angle between the positive z-axis and the line formed between the origin and P. - coordinate 2 (if specified): r >= 0 is the distance from the origin to a given point P. \see http://en.wikipedia.org/wiki/Spherical_coordinates \ingroup cs */ template struct spherical { typedef DegreeOrRadian units; }; /*! \brief Spherical equatorial coordinate system, in degree or in radian \details This one resembles the geographic coordinate system, and has latitude up from zero at the equator, to 90 at the pole (opposite to the spherical(polar) coordinate system). Used in astronomy and in GIS (but there is also the geographic) \see http://en.wikipedia.org/wiki/Spherical_coordinates \ingroup cs */ template struct spherical_equatorial { typedef DegreeOrRadian units; }; /*! \brief Polar coordinate system \details Defines the polar coordinate system "in which each point on a plane is determined by an angle and a distance" \see http://en.wikipedia.org/wiki/Polar_coordinates \ingroup cs */ template struct polar { typedef DegreeOrRadian units; }; } // namespace cs namespace traits { /*! \brief Traits class defining coordinate system tag, bound to coordinate system \ingroup traits \tparam CoordinateSystem coordinate system */ template struct cs_tag { }; #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS template struct cs_tag > { typedef geographic_tag type; }; template struct cs_tag > { typedef spherical_polar_tag type; }; template struct cs_tag > { typedef spherical_equatorial_tag type; }; template<> struct cs_tag { typedef cartesian_tag type; }; #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS } // namespace traits /*! \brief Meta-function returning coordinate system tag (cs family) of any geometry \ingroup core */ template struct cs_tag { typedef typename traits::cs_tag < typename geometry::coordinate_system::type >::type type; }; /*! \brief Meta-function to verify if a coordinate system is radian \ingroup core */ template struct is_radian : boost::true_type {}; #ifndef DOXYGEN_NO_SPECIALIZATIONS // Specialization for any degree coordinate systems template class CoordinateSystem> struct is_radian< CoordinateSystem > : boost::false_type { }; #endif // DOXYGEN_NO_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_CS_HPP exception.hpp000444000765000024 346612161110675 23572 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_EXCEPTION_HPP #define BOOST_GEOMETRY_CORE_EXCEPTION_HPP #include namespace boost { namespace geometry { /*! \brief Base exception class for Boost.Geometry algorithms \ingroup core \details This class is never thrown. All exceptions thrown in Boost.Geometry are derived from exception, so it might be convenient to catch it. */ class exception : public std::exception {}; /*! \brief Empty Input Exception \ingroup core \details The empty_input_exception is thrown if free functions, e.g. distance, are called with empty geometries, e.g. a linestring without points, a polygon without points, an empty multi-geometry. \qbk{ [heading See also] \* [link geometry.reference.algorithms.area the area function] \* [link geometry.reference.algorithms.distance the distance function] \* [link geometry.reference.algorithms.length the length function] } */ class empty_input_exception : public geometry::exception { public: inline empty_input_exception() {} virtual char const* what() const throw() { return "Boost.Geometry Empty-Input exception"; } }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_EXCEPTION_HPP exterior_ring.hpp000444000765000024 716412161110626 24447 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_EXTERIOR_RING_HPP #define BOOST_GEOMETRY_CORE_EXTERIOR_RING_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class defining access to exterior_ring of a polygon \details Should define const and non const access \ingroup traits \tparam Polygon the polygon type \par Geometries: - polygon \par Specializations should provide: - static inline RING& get(POLY& ) - static inline RING const& get(POLY const& ) */ template struct exterior_ring { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POLYGON_TYPE , (types) ); }; } // namespace traits #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct exterior_ring { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct exterior_ring { static typename geometry::ring_return_type::type apply(typename add_const_if_c < boost::is_const::type::value, Polygon >::type& polygon) { return traits::exterior_ring < typename boost::remove_const::type >::get(polygon); } }; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Function to get the exterior_ring ring of a polygon \ingroup exterior_ring \note OGC compliance: instead of ExteriorRing \tparam P polygon type \param polygon the polygon to get the exterior ring from \return a reference to the exterior ring */ template inline typename ring_return_type::type exterior_ring(Polygon& polygon) { return core_dispatch::exterior_ring < typename tag::type, Polygon >::apply(polygon); } /*! \brief Function to get the exterior ring of a polygon (const version) \ingroup exterior_ring \note OGC compliance: instead of ExteriorRing \tparam Polygon polygon type \param polygon the polygon to get the exterior ring from \return a const reference to the exterior ring \qbk{distinguish,const version} */ template inline typename ring_return_type::type exterior_ring( Polygon const& polygon) { return core_dispatch::exterior_ring < typename tag::type, Polygon const >::apply(polygon); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_EXTERIOR_RING_HPP geometry_id.hpp000444000765000024 436212161110675 24077 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_GEOMETRY_ID_HPP #define BOOST_GEOMETRY_CORE_GEOMETRY_ID_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct geometry_id { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template <> struct geometry_id : boost::mpl::int_<1> {}; template <> struct geometry_id : boost::mpl::int_<2> {}; template <> struct geometry_id : boost::mpl::int_<3> {}; template <> struct geometry_id : boost::mpl::int_<92> {}; template <> struct geometry_id : boost::mpl::int_<93> {}; template <> struct geometry_id : boost::mpl::int_<94> {}; } // namespace core_dispatch #endif /*! \brief Meta-function returning the id of a geometry type \details The meta-function geometry_id defines a numerical ID (based on boost::mpl::int_<...> ) for each geometry concept. A numerical ID is sometimes useful, and within Boost.Geometry it is used for the reverse_dispatch metafuntion. \note Used for e.g. reverse meta-function \ingroup core */ template struct geometry_id : core_dispatch::geometry_id::type> {}; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_GEOMETRY_ID_HPP interior_rings.hpp000444000765000024 666212161110612 24621 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_INTERIOR_RINGS_HPP #define BOOST_GEOMETRY_CORE_INTERIOR_RINGS_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class defining access to interior_rings of a polygon \details defines access (const and non const) to interior ring \ingroup traits \par Geometries: - polygon \par Specializations should provide: - static inline INTERIOR& get(POLY&) - static inline const INTERIOR& get(POLY const&) \tparam Geometry geometry */ template struct interior_rings { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; } // namespace traits #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template < typename GeometryTag, typename Geometry > struct interior_rings {}; template struct interior_rings { static inline typename geometry::interior_return_type::type apply(Polygon& polygon) { return traits::interior_rings < typename boost::remove_const::type >::get(polygon); } }; } // namespace core_dispatch #endif /*! \brief Function to get the interior rings of a polygon (non const version) \ingroup interior_rings \note OGC compliance: instead of InteriorRingN \tparam Polygon polygon type \param polygon the polygon to get the interior rings from \return the interior rings (possibly a reference) */ template inline typename interior_return_type::type interior_rings(Polygon& polygon) { return core_dispatch::interior_rings < typename tag::type, Polygon >::apply(polygon); } /*! \brief Function to get the interior rings of a polygon (const version) \ingroup interior_rings \note OGC compliance: instead of InteriorRingN \tparam Polygon polygon type \param polygon the polygon to get the interior rings from \return the interior rings (possibly a const reference) \qbk{distinguish,const version} */ template inline typename interior_return_type::type interior_rings( Polygon const& polygon) { return core_dispatch::interior_rings < typename tag::type, Polygon const >::apply(polygon); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_INTERIOR_RINGS_HPP interior_type.hpp000444000765000024 751612161110616 24463 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_INTERIOR_TYPE_HPP #define BOOST_GEOMETRY_CORE_INTERIOR_TYPE_HPP #include #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class indicating interior container type of a polygon \details defines inner container type, so the container containing the interior rings \ingroup traits \par Geometries: - polygon \par Specializations should provide: - typedef X type ( e.g. std::vector<myring<P>> ) \tparam Geometry geometry */ template struct interior_const_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct interior_mutable_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; } // namespace traits #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct interior_return_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct interior_return_type { typedef typename boost::remove_const::type nc_polygon_type; typedef typename mpl::if_ < boost::is_const, typename traits::interior_const_type::type, typename traits::interior_mutable_type::type >::type type; }; template struct interior_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct interior_type { typedef typename boost::remove_reference < typename interior_return_type::type >::type type; }; } // namespace core_dispatch #endif /*! \brief \brief_meta{type, interior_type (container type of inner rings), \meta_geometry_type} \details Interior rings should be organized as a container (std::vector, std::deque, boost::array) with Boost.Range support. This metafunction defines the type of the container. \tparam Geometry A type fullfilling the Polygon or MultiPolygon concept. \ingroup core \qbk{[include reference/core/interior_type.qbk]} */ template struct interior_type { typedef typename core_dispatch::interior_type < typename tag::type, Geometry >::type type; }; template struct interior_return_type { typedef typename core_dispatch::interior_return_type < typename tag::type, Geometry >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_INTERIOR_TYPE_HPP is_areal.hpp000444000765000024 317612161110635 23345 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_IS_AREAL_HPP #define BOOST_GEOMETRY_CORE_IS_AREAL_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct is_areal : boost::false_type {}; template <> struct is_areal : boost::true_type {}; template <> struct is_areal : boost::true_type {}; template <> struct is_areal : boost::true_type {}; } // namespace core_dispatch #endif /*! \brief Meta-function defining "true" for areal types (box, (multi)polygon, ring), \note Used for tag dispatching and meta-function finetuning \note Also a "ring" has areal properties within Boost.Geometry \ingroup core */ template struct is_areal : core_dispatch::is_areal::type> {}; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_IS_AREAL_HPP mutable_range.hpp000444000765000024 433612161110617 24372 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP #define BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Metafunction to define the argument passed to the three traits classes clear, push_back and resize \ingroup mutable_range */ template struct rvalue_type { typedef typename boost::remove_reference::type& type; }; /*! \brief Traits class to clear a geometry \ingroup mutable_range */ template struct clear { static inline void apply(typename rvalue_type::type range) { range.clear(); } }; /*! \brief Traits class to append a point to a range (ring, linestring, multi*) \ingroup mutable_range */ template struct push_back { typedef typename boost::range_value < typename boost::remove_reference::type >::type item_type; static inline void apply(typename rvalue_type::type range, item_type const& item) { range.push_back(item); } }; /*! \brief Traits class to append a point to a range (ring, linestring, multi*) \ingroup mutable_range */ template struct resize { static inline void apply(typename rvalue_type::type range, std::size_t new_size) { range.resize(new_size); } }; } // namespace traits }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP point_order.hpp000444000765000024 1030312161110656 24123 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_POINT_ORDER_HPP #define BOOST_GEOMETRY_CORE_POINT_ORDER_HPP #include #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Enumerates options for the order of points within polygons \ingroup enum \details The enumeration order_selector describes options for the order of points within a polygon. Polygons can be ordered either clockwise or counterclockwise. The specific order of a polygon type is defined by the point_order metafunction. The point_order metafunction defines a value, which is one of the values enumerated in the order_selector \qbk{ [heading See also] [link geometry.reference.core.point_order The point_order metafunction] } */ enum order_selector { /// Points are ordered clockwise clockwise = 1, /// Points are ordered counter clockwise counterclockwise = 2, /// Points might be stored in any order, algorithms will determine it on the /// fly (not yet supported) order_undetermined = 0 }; namespace traits { /*! \brief Traits class indicating the order of contained points within a ring or (multi)polygon, clockwise, counter clockwise or not known. \ingroup traits \tparam Ring ring */ template struct point_order { static const order_selector value = clockwise; }; } // namespace traits #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace point_order { struct clockwise { static const order_selector value = geometry::clockwise; }; }} // namespace detail::point_order #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct point_order { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct point_order : public detail::point_order::clockwise {}; template struct point_order : public detail::point_order::clockwise {}; template struct point_order : public detail::point_order::clockwise {}; template struct point_order : public detail::point_order::clockwise {}; template struct point_order { static const order_selector value = geometry::traits::point_order::value; }; // Specialization for polygon: the order is the order of its rings template struct point_order { static const order_selector value = core_dispatch::point_order < ring_tag, typename ring_type::type >::value ; }; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_meta{value, point order (clockwise\, counterclockwise), \meta_geometry_type} \tparam Geometry \tparam_geometry \ingroup core \qbk{[include reference/core/point_order.qbk]} */ template struct point_order { static const order_selector value = core_dispatch::point_order < typename tag::type, typename boost::remove_const::type >::value; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_POINT_ORDER_HPP point_type.hpp000444000765000024 620112161110670 23747 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_POINT_TYPE_HPP #define BOOST_GEOMETRY_CORE_POINT_TYPE_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class indicating the type of contained points \ingroup traits \par Geometries: - all geometries except point \par Specializations should provide: - typedef P type (where P should fulfil the Point concept) \tparam Geometry geometry */ template struct point_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types) ); }; } // namespace traits #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct point_type { // Default: call traits to get point type typedef typename boost::remove_const < typename traits::point_type::type >::type type; }; // Specialization for point: the point itself template struct point_type { typedef Point type; }; // Specializations for linestring/ring, via boost::range template struct point_type { typedef typename boost::range_value::type type; }; template struct point_type { typedef typename boost::range_value::type type; }; // Specialization for polygon: the point-type is the point-type of its rings template struct point_type { typedef typename point_type < ring_tag, typename ring_type::type >::type type; }; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief \brief_meta{type, point_type, \meta_geometry_type} \tparam Geometry \tparam_geometry \ingroup core \qbk{[include reference/core/point_type.qbk]} */ template struct point_type { typedef typename core_dispatch::point_type < typename tag::type, typename boost::geometry::util::bare_type::type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_POINT_TYPE_HPP radian_access.hpp000444000765000024 1054612161110650 24361 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_RADIAN_ACCESS_HPP #define BOOST_GEOMETRY_CORE_RADIAN_ACCESS_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct degree_radian_converter { typedef typename fp_coordinate_type::type coordinate_type; static inline coordinate_type get(Geometry const& geometry) { return boost::numeric_cast < coordinate_type >(geometry::get(geometry) * geometry::math::d2r); } static inline void set(Geometry& geometry, coordinate_type const& radians) { geometry::set(geometry, boost::numeric_cast < coordinate_type >(radians * geometry::math::r2d)); } }; // Default, radian (or any other coordinate system) just works like "get" template struct radian_access { typedef typename fp_coordinate_type::type coordinate_type; static inline coordinate_type get(Geometry const& geometry) { return geometry::get(geometry); } static inline void set(Geometry& geometry, coordinate_type const& radians) { geometry::set(geometry, radians); } }; // Specialize, any "degree" coordinate system will be converted to radian // but only for dimension 0,1 (so: dimension 2 and heigher are untouched) template < typename Geometry, template class CoordinateSystem > struct radian_access<0, Geometry, CoordinateSystem > : degree_radian_converter<0, Geometry> {}; template < typename Geometry, template class CoordinateSystem > struct radian_access<1, Geometry, CoordinateSystem > : degree_radian_converter<1, Geometry> {}; } // namespace detail #endif // DOXYGEN_NO_DETAIL /*! \brief get coordinate value of a point, result is in Radian \details Result is in Radian, even if source coordinate system is in Degrees \return coordinate value \ingroup get \tparam Dimension dimension \tparam Geometry geometry \param geometry geometry to get coordinate value from \note Only applicable to coordinate systems templatized by units, e.g. spherical or geographic coordinate systems */ template inline typename fp_coordinate_type::type get_as_radian(Geometry const& geometry) { return detail::radian_access::type>::get(geometry); } /*! \brief set coordinate value (in radian) to a point \details Coordinate value will be set correctly, if coordinate system of point is in Degree, Radian value will be converted to Degree \ingroup set \tparam Dimension dimension \tparam Geometry geometry \param geometry geometry to assign coordinate to \param radians coordinate value to assign \note Only applicable to coordinate systems templatized by units, e.g. spherical or geographic coordinate systems */ template inline void set_from_radian(Geometry& geometry, typename fp_coordinate_type::type const& radians) { detail::radian_access::type>::set(geometry, radians); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_RADIAN_ACCESS_HPP reverse_dispatch.hpp000444000765000024 335012161110641 25107 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_REVERSE_DISPATCH_HPP #define BOOST_GEOMETRY_CORE_REVERSE_DISPATCH_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { // Different geometries: reverse_dispatch if second ID < first ID template struct reverse_dispatch : boost::mpl::if_c < (GeometryId1 > GeometryId2), boost::true_type, boost::false_type > {}; // Same geometry: never reverse_dispatch template struct reverse_dispatch : boost::false_type {}; } // namespace detail #endif // DOXYGEN_NO_DETAIL template struct reverse_dispatch : detail::reverse_dispatch < geometry_id::type::value, geometry_id::type::value > {}; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_REVERSE_DISPATCH_HPP ring_type.hpp000444000765000024 735312161110677 23575 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_RING_TYPE_HPP #define BOOST_GEOMETRY_CORE_RING_TYPE_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class to indicate ring-type of a polygon's exterior ring/interior rings \ingroup traits \par Geometries: - polygon \par Specializations should provide: - typedef XXX type ( e.g. ring

) \tparam Geometry geometry */ template struct ring_const_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct ring_mutable_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; } // namespace traits #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct ring_return_type {}; template struct ring_return_type { typedef LineString& type; }; template struct ring_return_type { typedef Ring& type; }; template struct ring_return_type { typedef typename boost::remove_const::type nc_polygon_type; typedef typename mpl::if_ < boost::is_const, typename traits::ring_const_type::type, typename traits::ring_mutable_type::type >::type type; }; template struct ring_type {}; template struct ring_type { typedef Ring type; }; template struct ring_type { typedef typename boost::remove_reference < typename ring_return_type::type >::type type; }; } // namespace core_dispatch #endif /*! \brief \brief_meta{type, ring_type, \meta_geometry_type} \details A polygon contains one exterior ring and zero or more interior rings (holes). This metafunction retrieves the type of the rings. Exterior ring and each of the interior rings all have the same ring_type. \tparam Geometry A type fullfilling the Ring, Polygon or MultiPolygon concept. \ingroup core \qbk{[include reference/core/ring_type.qbk]} */ template struct ring_type { typedef typename core_dispatch::ring_type < typename tag::type, Geometry >::type type; }; template struct ring_return_type { typedef typename core_dispatch::ring_return_type < typename tag::type, Geometry >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_RING_TYPE_HPP tag.hpp000444000765000024 356612161110640 22340 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_TAG_HPP #define BOOST_GEOMETRY_CORE_TAG_HPP #include #include #include namespace boost { namespace geometry { namespace traits { /*! \brief Traits class to attach a tag to a geometry \details All geometries should implement a traits::tag::type metafunction to indicate their own geometry type. \ingroup traits \par Geometries: - all geometries \par Specializations should provide: - typedef XXX_tag type; (point_tag, box_tag, ...) \tparam Geometry geometry */ template struct tag { typedef void type; }; } // namespace traits /*! \brief \brief_meta{type, tag, \meta_geometry_type} \details With Boost.Geometry, tags are the driving force of the tag dispatching mechanism. The tag metafunction is therefore used in every free function. \tparam Geometry \tparam_geometry \ingroup core \qbk{[include reference/core/tag.qbk]} */ template struct tag { typedef typename traits::tag < typename geometry::util::bare_type::type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_TAG_HPP tag_cast.hpp000444000765000024 512612161110671 23350 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_TAG_CAST_HPP #define BOOST_GEOMETRY_CORE_TAG_CAST_HPP #include #include namespace boost { namespace geometry { /*! \brief Metafunction defining a type being either the specified tag, or one of the specified basetags if the type inherits from them. \details Tags can inherit each other. A multi_point inherits, for example, both the multi_tag and the pointlike tag. Often behaviour can be shared between different geometry types. A tag, found by the metafunction tag, can be casted to a more basic tag, and then dispatched by that tag. \ingroup core \tparam Tag The tag to be casted to one of the base tags \tparam BaseTag First base tag \tparam BaseTag2 Optional second base tag \tparam BaseTag3 Optional third base tag \tparam BaseTag4 Optional fourth base tag \tparam BaseTag5 Optional fifth base tag \tparam BaseTag6 Optional sixth base tag \tparam BaseTag7 Optional seventh base tag \qbk{[include reference/core/tag_cast.qbk]} */ template < typename Tag, typename BaseTag, typename BaseTag2 = void, typename BaseTag3 = void, typename BaseTag4 = void, typename BaseTag5 = void, typename BaseTag6 = void, typename BaseTag7 = void > struct tag_cast { typedef typename boost::mpl::if_ < typename boost::is_base_of::type, BaseTag, // Try next one in line: typename tag_cast < Tag, BaseTag2, BaseTag3, BaseTag4, BaseTag5, BaseTag6, BaseTag7, void >::type >::type type; }; #ifndef DOXYGEN_NO_SPECIALIZATIONS // Specialization for last one template struct tag_cast { // If not found, take specified tag, so do not cast typedef Tag type; }; #endif // DOXYGEN_NO_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_TAG_CAST_HPP tags.hpp000444000765000024 524312161110612 22514 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_TAGS_HPP #define BOOST_GEOMETRY_CORE_TAGS_HPP namespace boost { namespace geometry { // Tags defining strategies linked to coordinate systems /// Tag used for casting spherical/geographic coordinate systems struct spherical_tag {}; /// Tag indicating Cartesian coordinate system family (cartesian,epsg) struct cartesian_tag {}; /// Tag indicating Spherical polar coordinate system family struct spherical_polar_tag : spherical_tag {}; /// Tag indicating Spherical equatorial coordinate system family struct spherical_equatorial_tag : spherical_tag {}; /// Tag indicating Geographic coordinate system family (geographic) struct geographic_tag : spherical_tag {}; // Tags defining tag hierarchy /// For single-geometries (point, linestring, polygon, box, ring, segment) struct single_tag {}; /// For multiple-geometries (multi_point, multi_linestring, multi_polygon) struct multi_tag {}; /// For point-like types (point, multi_point) struct pointlike_tag {}; /// For linear types (linestring, multi-linestring, segment) struct linear_tag {}; /// For areal types (polygon, multi_polygon, box, ring) struct areal_tag {}; // Subset of areal types (polygon, multi_polygon, ring) struct polygonal_tag : areal_tag {}; /// For volume types (also box (?), polyhedron) struct volumetric_tag {}; // Tags defining geometry types /// "default" tag struct geometry_not_recognized_tag {}; /// OGC Point identifying tag struct point_tag : single_tag, pointlike_tag {}; /// OGC Linestring identifying tag struct linestring_tag : single_tag, linear_tag {}; /// OGC Polygon identifying tag struct polygon_tag : single_tag, polygonal_tag {}; /// Convenience (linear) ring identifying tag struct ring_tag : single_tag, polygonal_tag {}; /// Convenience 2D or 3D box (mbr / aabb) identifying tag struct box_tag : single_tag, areal_tag {}; /// Convenience segment (2-points) identifying tag struct segment_tag : single_tag, linear_tag {}; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_TAGS_HPP topological_dimension.hpp000444000765000024 411312161110674 26142 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_CORE_TOPOLOGICAL_DIMENSION_HPP #define BOOST_GEOMETRY_CORE_TOPOLOGICAL_DIMENSION_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct top_dim {}; template <> struct top_dim : boost::mpl::int_<0> {}; template <> struct top_dim : boost::mpl::int_<1> {}; template <> struct top_dim : boost::mpl::int_<1> {}; // ring: topological dimension of two, but some people say: 1 !! template <> struct top_dim : boost::mpl::int_<2> {}; template <> struct top_dim : boost::mpl::int_<2> {}; template <> struct top_dim : boost::mpl::int_<2> {}; } // namespace core_dispatch #endif /*! \brief Meta-function returning the topological dimension of a geometry \details The topological dimension defines a point as 0-dimensional, a linestring as 1-dimensional, and a ring or polygon as 2-dimensional. \see http://www.math.okstate.edu/mathdept/dynamics/lecnotes/node36.html \ingroup core */ template struct topological_dimension : core_dispatch::top_dim::type> {}; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_TOPOLOGICAL_DIMENSION_HPP geometries000755000765000024 012161110700 22115 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometrybox.hpp000444000765000024 737112161110700 23563 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_BOX_HPP #define BOOST_GEOMETRY_GEOMETRIES_BOX_HPP #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief Class box: defines a box made of two describing points \ingroup geometries \details Box is always described by a min_corner() and a max_corner() point. If another rectangle is used, use linear_ring or polygon. \note Boxes are for selections and for calculating the envelope of geometries. Not all algorithms are implemented for box. Boxes are also used in Spatial Indexes. \tparam Point point type. The box takes a point type as template parameter. The point type can be any point type. It can be 2D but can also be 3D or more dimensional. The box can also take a latlong point type as template parameter. */ template class box { BOOST_CONCEPT_ASSERT( (concept::Point) ); public: inline box() {} /*! \brief Constructor taking the minimum corner point and the maximum corner point */ inline box(Point const& min_corner, Point const& max_corner) { geometry::convert(min_corner, m_min_corner); geometry::convert(max_corner, m_max_corner); } inline Point const& min_corner() const { return m_min_corner; } inline Point const& max_corner() const { return m_max_corner; } inline Point& min_corner() { return m_min_corner; } inline Point& max_corner() { return m_max_corner; } private: Point m_min_corner; Point m_max_corner; }; } // namespace model // Traits specializations for box above #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef box_tag type; }; template struct point_type > { typedef Point type; }; template struct indexed_access, min_corner, Dimension> { typedef typename geometry::coordinate_type::type coordinate_type; static inline coordinate_type get(model::box const& b) { return geometry::get(b.min_corner()); } static inline void set(model::box& b, coordinate_type const& value) { geometry::set(b.min_corner(), value); } }; template struct indexed_access, max_corner, Dimension> { typedef typename geometry::coordinate_type::type coordinate_type; static inline coordinate_type get(model::box const& b) { return geometry::get(b.max_corner()); } static inline void set(model::box& b, coordinate_type const& value) { geometry::set(b.max_corner(), value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_BOX_HPP geometries.hpp000444000765000024 176412161110655 25147 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_HPP #define BOOST_GEOMETRY_GEOMETRIES_HPP #include #include #include #include #include #include #endif // BOOST_GEOMETRY_GEOMETRIES_HPP linestring.hpp000444000765000024 464512161110611 25153 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_LINESTRING_HPP #define BOOST_GEOMETRY_GEOMETRIES_LINESTRING_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief A linestring (named so by OGC) is a collection (default a vector) of points. \ingroup geometries \tparam Point \tparam_point \tparam Container \tparam_container \tparam Allocator \tparam_allocator \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_linestring Linestring Concept] } */ template < typename Point, template class Container = std::vector, template class Allocator = std::allocator > class linestring : public Container > { BOOST_CONCEPT_ASSERT( (concept::Point) ); typedef Container > base_type; public : /// \constructor_default{linestring} inline linestring() : base_type() {} /// \constructor_begin_end{linestring} template inline linestring(Iterator begin, Iterator end) : base_type(begin, end) {} }; } // namespace model #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template < typename Point, template class Container, template class Allocator > struct tag > { typedef linestring_tag type; }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_LINESTRING_HPP point.hpp000444000765000024 1146312161110672 24151 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_POINT_HPP #define BOOST_GEOMETRY_GEOMETRIES_POINT_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief Basic point class, having coordinates defined in a neutral way \details Defines a neutral point class, fulfilling the Point Concept. Library users can use this point class, or use their own point classes. This point class is used in most of the samples and tests of Boost.Geometry This point class is used occasionally within the library, where a temporary point class is necessary. \ingroup geometries \tparam CoordinateType \tparam_numeric \tparam DimensionCount number of coordinates, usually 2 or 3 \tparam CoordinateSystem coordinate system, for example cs::cartesian \qbk{[include reference/geometries/point.qbk]} \qbk{before.synopsis, [heading Model of]} \qbk{before.synopsis, [link geometry.reference.concepts.concept_point Point Concept]} */ template < typename CoordinateType, std::size_t DimensionCount, typename CoordinateSystem > class point { public: /// @brief Default constructor, no initialization inline point() {} /// @brief Constructor to set one, two or three values inline point(CoordinateType const& v0, CoordinateType const& v1 = 0, CoordinateType const& v2 = 0) { if (DimensionCount >= 1) m_values[0] = v0; if (DimensionCount >= 2) m_values[1] = v1; if (DimensionCount >= 3) m_values[2] = v2; } /// @brief Get a coordinate /// @tparam K coordinate to get /// @return the coordinate template inline CoordinateType const& get() const { BOOST_STATIC_ASSERT(K < DimensionCount); return m_values[K]; } /// @brief Set a coordinate /// @tparam K coordinate to set /// @param value value to set template inline void set(CoordinateType const& value) { BOOST_STATIC_ASSERT(K < DimensionCount); m_values[K] = value; } private: CoordinateType m_values[DimensionCount]; }; } // namespace model // Adapt the point to the concept #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template < typename CoordinateType, std::size_t DimensionCount, typename CoordinateSystem > struct tag > { typedef point_tag type; }; template < typename CoordinateType, std::size_t DimensionCount, typename CoordinateSystem > struct coordinate_type > { typedef CoordinateType type; }; template < typename CoordinateType, std::size_t DimensionCount, typename CoordinateSystem > struct coordinate_system > { typedef CoordinateSystem type; }; template < typename CoordinateType, std::size_t DimensionCount, typename CoordinateSystem > struct dimension > : boost::mpl::int_ {}; template < typename CoordinateType, std::size_t DimensionCount, typename CoordinateSystem, std::size_t Dimension > struct access, Dimension> { static inline CoordinateType get( model::point const& p) { return p.template get(); } static inline void set( model::point& p, CoordinateType const& value) { p.template set(value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_POINT_HPP point_xy.hpp000444000765000024 725512161110675 24660 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP #define BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP #include #include #include #include namespace boost { namespace geometry { namespace model { namespace d2 { /*! \brief 2D point in Cartesian coordinate system \tparam CoordinateType numeric type, for example, double, float, int \tparam CoordinateSystem coordinate system, defaults to cs::cartesian \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_point Point Concept] } \qbk{[include reference/geometries/point_assign_warning.qbk]} */ template class point_xy : public model::point { public: /// Default constructor, does not initialize anything inline point_xy() : model::point() {} /// Constructor with x/y values inline point_xy(CoordinateType const& x, CoordinateType const& y) : model::point(x, y) {} /// Get x-value inline CoordinateType const& x() const { return this->template get<0>(); } /// Get y-value inline CoordinateType const& y() const { return this->template get<1>(); } /// Set x-value inline void x(CoordinateType const& v) { this->template set<0>(v); } /// Set y-value inline void y(CoordinateType const& v) { this->template set<1>(v); } }; }} // namespace model::d2 // Adapt the point_xy to the concept #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef point_tag type; }; template struct coordinate_type > { typedef CoordinateType type; }; template struct coordinate_system > { typedef CoordinateSystem type; }; template struct dimension > : boost::mpl::int_<2> {}; template struct access, Dimension > { static inline CoordinateType get( model::d2::point_xy const& p) { return p.template get(); } static inline void set(model::d2::point_xy& p, CoordinateType const& value) { p.template set(value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP polygon.hpp000444000765000024 2003212161110655 24500 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_POLYGON_HPP #define BOOST_GEOMETRY_GEOMETRIES_POLYGON_HPP #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief The polygon contains an outer ring and zero or more inner rings. \ingroup geometries \tparam Point point type \tparam ClockWise true for clockwise direction, false for CounterClockWise direction \tparam Closed true for closed polygons (last point == first point), false open points \tparam PointList container type for points, for example std::vector, std::list, std::deque \tparam RingList container type for inner rings, for example std::vector, std::list, std::deque \tparam PointAlloc container-allocator-type, for the points \tparam RingAlloc container-allocator-type, for the rings \note The container collecting the points in the rings can be different from the container collecting the inner rings. They all default to vector. \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_polygon Polygon Concept] } */ template < typename Point, bool ClockWise = true, bool Closed = true, template class PointList = std::vector, template class RingList = std::vector, template class PointAlloc = std::allocator, template class RingAlloc = std::allocator > class polygon { BOOST_CONCEPT_ASSERT( (concept::Point) ); public: // Member types typedef Point point_type; typedef ring ring_type; typedef RingList > inner_container_type; inline ring_type const& outer() const { return m_outer; } inline inner_container_type const& inners() const { return m_inners; } inline ring_type& outer() { return m_outer; } inline inner_container_type & inners() { return m_inners; } /// Utility method, clears outer and inner rings inline void clear() { m_outer.clear(); m_inners.clear(); } private: ring_type m_outer; inner_container_type m_inners; }; } // namespace model #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template < typename Point, bool ClockWise, bool Closed, template class PointList, template class RingList, template class PointAlloc, template class RingAlloc > struct tag < model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > > { typedef polygon_tag type; }; template < typename Point, bool ClockWise, bool Closed, template class PointList, template class RingList, template class PointAlloc, template class RingAlloc > struct ring_const_type < model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > > { typedef typename model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc >::ring_type const& type; }; template < typename Point, bool ClockWise, bool Closed, template class PointList, template class RingList, template class PointAlloc, template class RingAlloc > struct ring_mutable_type < model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > > { typedef typename model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc >::ring_type& type; }; template < typename Point, bool ClockWise, bool Closed, template class PointList, template class RingList, template class PointAlloc, template class RingAlloc > struct interior_const_type < model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > > { typedef typename model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc >::inner_container_type const& type; }; template < typename Point, bool ClockWise, bool Closed, template class PointList, template class RingList, template class PointAlloc, template class RingAlloc > struct interior_mutable_type < model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > > { typedef typename model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc >::inner_container_type& type; }; template < typename Point, bool ClockWise, bool Closed, template class PointList, template class RingList, template class PointAlloc, template class RingAlloc > struct exterior_ring < model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > > { typedef model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > polygon_type; static inline typename polygon_type::ring_type& get(polygon_type& p) { return p.outer(); } static inline typename polygon_type::ring_type const& get( polygon_type const& p) { return p.outer(); } }; template < typename Point, bool ClockWise, bool Closed, template class PointList, template class RingList, template class PointAlloc, template class RingAlloc > struct interior_rings < model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > > { typedef model::polygon < Point, ClockWise, Closed, PointList, RingList, PointAlloc, RingAlloc > polygon_type; static inline typename polygon_type::inner_container_type& get( polygon_type& p) { return p.inners(); } static inline typename polygon_type::inner_container_type const& get( polygon_type const& p) { return p.inners(); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_POLYGON_HPP ring.hpp000444000765000024 756712161110640 23744 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_RING_HPP #define BOOST_GEOMETRY_GEOMETRIES_RING_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief A ring (aka linear ring) is a closed line which should not be selfintersecting \ingroup geometries \tparam Point point type \tparam ClockWise true for clockwise direction, false for CounterClockWise direction \tparam Closed true for closed polygons (last point == first point), false open points \tparam Container container type, for example std::vector, std::deque \tparam Allocator container-allocator-type \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_ring Ring Concept] } */ template < typename Point, bool ClockWise = true, bool Closed = true, template class Container = std::vector, template class Allocator = std::allocator > class ring : public Container > { BOOST_CONCEPT_ASSERT( (concept::Point) ); typedef Container > base_type; public : /// \constructor_default{ring} inline ring() : base_type() {} /// \constructor_begin_end{ring} template inline ring(Iterator begin, Iterator end) : base_type(begin, end) {} }; } // namespace model #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template < typename Point, bool ClockWise, bool Closed, template class Container, template class Allocator > struct tag > { typedef ring_tag type; }; template < typename Point, bool Closed, template class Container, template class Allocator > struct point_order > { static const order_selector value = counterclockwise; }; template < typename Point, bool Closed, template class Container, template class Allocator > struct point_order > { static const order_selector value = clockwise; }; template < typename Point, bool PointOrder, template class Container, template class Allocator > struct closure > { static const closure_selector value = closed; }; template < typename Point, bool PointOrder, template class Container, template class Allocator > struct closure > { static const closure_selector value = open; }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_RING_HPP segment.hpp000444000765000024 1351612161110640 24456 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_SEGMENT_HPP #define BOOST_GEOMETRY_GEOMETRIES_SEGMENT_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief Class segment: small class containing two points \ingroup geometries \details From Wikipedia: In geometry, a line segment is a part of a line that is bounded by two distinct end points, and contains every point on the line between its end points. \note There is also a point-referring-segment, class referring_segment, containing point references, where points are NOT copied */ template class segment : public std::pair { public : inline segment() {} inline segment(Point const& p1, Point const& p2) { this->first = p1; this->second = p2; } }; /*! \brief Class segment: small class containing two (templatized) point references \ingroup geometries \details From Wikipedia: In geometry, a line segment is a part of a line that is bounded by two distinct end points, and contains every point on the line between its end points. \note The structure is like std::pair, and can often be used interchangeable. Difference is that it refers to points, does not have points. \note Like std::pair, points are public available. \note type is const or non const, so geometry::segment

or geometry::segment

\note We cannot derive from std::pair because of reference assignments. \tparam ConstOrNonConstPoint point type of the segment, maybe a point or a const point */ template class referring_segment { BOOST_CONCEPT_ASSERT( ( typename boost::mpl::if_ < boost::is_const, concept::Point, concept::ConstPoint > ) ); typedef ConstOrNonConstPoint point_type; public: point_type& first; point_type& second; inline referring_segment(point_type& p1, point_type& p2) : first(p1) , second(p2) {} }; } // namespace model // Traits specializations for segment above #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef segment_tag type; }; template struct point_type > { typedef Point type; }; template struct indexed_access, 0, Dimension> { typedef model::segment segment_type; typedef typename geometry::coordinate_type::type coordinate_type; static inline coordinate_type get(segment_type const& s) { return geometry::get(s.first); } static inline void set(segment_type& s, coordinate_type const& value) { geometry::set(s.first, value); } }; template struct indexed_access, 1, Dimension> { typedef model::segment segment_type; typedef typename geometry::coordinate_type::type coordinate_type; static inline coordinate_type get(segment_type const& s) { return geometry::get(s.second); } static inline void set(segment_type& s, coordinate_type const& value) { geometry::set(s.second, value); } }; template struct tag > { typedef segment_tag type; }; template struct point_type > { typedef ConstOrNonConstPoint type; }; template struct indexed_access, 0, Dimension> { typedef model::referring_segment segment_type; typedef typename geometry::coordinate_type::type coordinate_type; static inline coordinate_type get(segment_type const& s) { return geometry::get(s.first); } static inline void set(segment_type& s, coordinate_type const& value) { geometry::set(s.first, value); } }; template struct indexed_access, 1, Dimension> { typedef model::referring_segment segment_type; typedef typename geometry::coordinate_type::type coordinate_type; static inline coordinate_type get(segment_type const& s) { return geometry::get(s.second); } static inline void set(segment_type& s, coordinate_type const& value) { geometry::set(s.second, value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_SEGMENT_HPP variant.hpp000444000765000024 203712161110620 24432 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_VARIANT_GEOMETRY_HPP #define BOOST_GEOMETRY_GEOMETRIES_VARIANT_GEOMETRY_HPP #include namespace boost { namespace geometry { template struct point_type > : point_type {}; } // namespace geometry } // namespace boost #endif // BOOST_GEOMETRY_GEOMETRIES_VARIANT_GEOMETRY_HPP adapted000755000765000024 012161110666 23532 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometriesboost_array.hpp000444000765000024 623112161110653 26722 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010 Alfredo Correa // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_ARRAY_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_ARRAY_HPP #ifdef BOOST_GEOMETRY_ADAPTED_BOOST_ARRAY_TAG_DEFINED #error Include either "boost_array_as_point" or \ "boost_array_as_linestring" or "boost_array_as_ring" \ or "boost_array_as_multi_point" to adapt a boost_array #endif #define BOOST_GEOMETRY_ADAPTED_BOOST_ARRAY_TAG_DEFINED #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { #ifndef DOXYGEN_NO_DETAIL namespace detail { // Create class and specialization to indicate the tag // for normal cases and the case that the type of the c-array is arithmetic template struct boost_array_tag { typedef geometry_not_recognized_tag type; }; template <> struct boost_array_tag { typedef point_tag type; }; } // namespace detail #endif // DOXYGEN_NO_DETAIL // Assign the point-tag, preventing arrays of points getting a point-tag template struct tag > : detail::boost_array_tag::value> {}; template struct coordinate_type > { typedef CoordinateType type; }; template struct dimension >: boost::mpl::int_ {}; template struct access, Dimension> { static inline CoordinateType get(boost::array const& a) { return a[Dimension]; } static inline void set(boost::array& a, CoordinateType const& value) { a[Dimension] = value; } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #define BOOST_GEOMETRY_REGISTER_BOOST_ARRAY_CS(CoordinateSystem) \ namespace boost { namespace geometry { namespace traits { \ template \ struct coordinate_system > \ { \ typedef CoordinateSystem type; \ }; \ }}} #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_ARRAY_HPP boost_fusion.hpp000444000765000024 1104512161110620 27120 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2011-2012 Akira Takahashi // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_FUSION_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_FUSION_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace fusion_adapt_detail { template struct all_same : boost::mpl::bool_< boost::mpl::count_if< Sequence, boost::is_same< typename boost::mpl::front::type, boost::mpl::_ > >::value == boost::mpl::size::value > {}; template struct is_coordinate_size : boost::mpl::bool_< boost::fusion::result_of::size::value == 2 || boost::fusion::result_of::size::value == 3> {}; template struct is_fusion_sequence : mpl::and_, fusion_adapt_detail::is_coordinate_size, fusion_adapt_detail::all_same > {}; } // namespace fusion_adapt_detail #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { // Boost Fusion Sequence, 2D or 3D template struct coordinate_type < Sequence, typename boost::enable_if < fusion_adapt_detail::is_fusion_sequence >::type > { typedef typename boost::mpl::front::type type; }; template struct dimension < Sequence, typename boost::enable_if < fusion_adapt_detail::is_fusion_sequence >::type > : boost::mpl::size {}; template struct access < Sequence, Dimension, typename boost::enable_if < fusion_adapt_detail::is_fusion_sequence >::type > { typedef typename coordinate_type::type ctype; static inline ctype get(Sequence const& point) { return boost::fusion::at_c(point); } template static inline void set(Sequence& point, CoordinateType const& value) { boost::fusion::at_c(point) = value; } }; template struct tag < Sequence, typename boost::enable_if < fusion_adapt_detail::is_fusion_sequence >::type > { typedef point_tag type; }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry // Convenience registration macro to bind a Fusion sequence to a CS #define BOOST_GEOMETRY_REGISTER_BOOST_FUSION_CS(CoordinateSystem) \ namespace boost { namespace geometry { namespace traits { \ template \ struct coordinate_system \ < \ Sequence, \ typename boost::enable_if \ < \ fusion_adapt_detail::is_fusion_sequence \ >::type \ > \ { typedef CoordinateSystem type; }; \ }}} #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_FUSION_HPP boost_polygon.hpp000444000765000024 143112161110666 27274 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HPP #include #include #include #include #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HPP boost_tuple.hpp000444000765000024 653412161110665 26746 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_TUPLE_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_TUPLE_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef point_tag type; }; template struct coordinate_type > { typedef T1 type; }; template struct dimension > : boost::mpl::int_ < boost::tuples::length < boost::tuple >::value > {}; template struct access < boost::tuple, Dimension > { static inline T1 get( boost::tuple const& point) { return point.template get(); } static inline void set( boost::tuple& point, T1 const& value) { point.template get() = value; } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry // Convenience registration macro to bind boost::tuple to a CS #define BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(CoordinateSystem) \ namespace boost { namespace geometry { namespace traits { \ template \ struct coordinate_system > \ { \ typedef CoordinateSystem type; \ }; \ }}} #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_TUPLE_HPP c_array.hpp000444000765000024 566612161110611 26023 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_C_ARRAY_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_C_ARRAY_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { #ifndef DOXYGEN_NO_DETAIL namespace detail { // Create class and specialization to indicate the tag // for normal cases and the case that the type of the c-array is arithmetic template struct c_array_tag { typedef geometry_not_recognized_tag type; }; template <> struct c_array_tag { typedef point_tag type; }; } // namespace detail #endif // DOXYGEN_NO_DETAIL // Assign the point-tag, preventing arrays of points getting a point-tag template struct tag : detail::c_array_tag::value> {}; template struct coordinate_type { typedef CoordinateType type; }; template struct dimension: boost::mpl::int_ {}; template struct access { static inline CoordinateType get(CoordinateType const p[DimensionCount]) { return p[Dimension]; } static inline void set(CoordinateType p[DimensionCount], CoordinateType const& value) { p[Dimension] = value; } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #define BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(CoordinateSystem) \ namespace boost { namespace geometry { namespace traits { \ template \ struct coordinate_system \ { \ typedef CoordinateSystem type; \ }; \ }}} #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_C_ARRAY_HPP std_pair_as_segment.hpp000444000765000024 532412161110604 30406 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_PAIR_AS_SEGMENT_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_PAIR_AS_SEGMENT_HPP // Only possible if the std::pair is not used for iterator/pair // (maybe it is possible to avoid that by detecting in the other file // if an iterator was used in the pair) #ifdef BOOST_GEOMETRY_ADAPTED_STD_RANGE_TAG_DEFINED #error Include only one headerfile to register tag for adapted std:: containers or iterator pair #endif #define BOOST_GEOMETRY_ADAPTED_STD_RANGE_TAG_DEFINED #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef segment_tag type; }; template struct point_type > { typedef Point type; }; template struct indexed_access, 0, Dimension> { typedef typename geometry::coordinate_type::type coordinate_type; static inline coordinate_type get(std::pair const& s) { return geometry::get(s.first); } static inline void set(std::pair& s, coordinate_type const& value) { geometry::set(s.first, value); } }; template struct indexed_access, 1, Dimension> { typedef typename geometry::coordinate_type::type coordinate_type; static inline coordinate_type get(std::pair const& s) { return geometry::get(s.second); } static inline void set(std::pair& s, coordinate_type const& value) { geometry::set(s.second, value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_PAIR_AS_SEGMENT_HPP boost_polygon000755000765000024 012161110700 26414 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adaptedbox.hpp000444000765000024 651012161110671 30063 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_polygon// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_BOX_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_BOX_HPP // Adapts Geometries from Boost.Polygon for usage in Boost.Geometry // boost::polygon::rectangle_data -> boost::geometry::box #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef box_tag type; }; template struct point_type > { // Not sure what to do here. Boost.Polygon's rectangle does NOT define its // point_type (but uses it...) typedef boost::polygon::point_data type; }; template struct indexed_access < boost::polygon::rectangle_data, min_corner, 0 > { typedef boost::polygon::rectangle_data box_type; static inline CoordinateType get(box_type const& b) { return boost::polygon::xl(b); } static inline void set(box_type& b, CoordinateType const& value) { boost::polygon::xl(b, value); } }; template struct indexed_access < boost::polygon::rectangle_data, min_corner, 1 > { typedef boost::polygon::rectangle_data box_type; static inline CoordinateType get(box_type const& b) { return boost::polygon::yl(b); } static inline void set(box_type& b, CoordinateType const& value) { boost::polygon::yl(b, value); } }; template struct indexed_access < boost::polygon::rectangle_data, max_corner, 0 > { typedef boost::polygon::rectangle_data box_type; static inline CoordinateType get(box_type const& b) { return boost::polygon::xh(b); } static inline void set(box_type& b, CoordinateType const& value) { boost::polygon::xh(b, value); } }; template struct indexed_access < boost::polygon::rectangle_data, max_corner, 1 > { typedef boost::polygon::rectangle_data box_type; static inline CoordinateType get(box_type const& b) { return boost::polygon::yh(b); } static inline void set(box_type& b, CoordinateType const& value) { boost::polygon::yh(b, value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_BOX_HPP hole_iterator.hpp000444000765000024 425312161110654 32136 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_polygon// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLE_ITERATOR_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLE_ITERATOR_HPP // Adapts Geometries from Boost.Polygon for usage in Boost.Geometry // boost::polygon::polygon_with_holes_data -> boost::geometry::polygon // hole_iterator -> returning ring_proxy's instead of normal polygon_data #include #include #include namespace boost { namespace geometry { namespace adapt { namespace bp { template class hole_iterator : public ::boost::iterator_facade < hole_iterator, RingProxy, // value type boost::forward_traversal_tag, RingProxy // reference type > { public : typedef typename boost::polygon::polygon_with_holes_traits < Polygon >::iterator_holes_type ith_type; explicit inline hole_iterator(Polygon& polygon, ith_type const it) : m_polygon(polygon) , m_base(it) { } typedef std::ptrdiff_t difference_type; private: friend class boost::iterator_core_access; inline RingProxy dereference() const { return RingProxy(m_polygon, this->m_base); } inline void increment() { ++m_base; } inline void decrement() { --m_base; } inline void advance(difference_type n) { for (int i = 0; i < n; i++) { ++m_base; } } inline bool equal(hole_iterator const& other) const { return this->m_base == other.m_base; } Polygon& m_polygon; ith_type m_base; }; }}}} #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLE_ITERATOR_HPP holes_proxy.hpp000444000765000024 1411312161110700 31655 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_polygon// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLES_PROXY_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLES_PROXY_HPP // Adapts Geometries from Boost.Polygon for usage in Boost.Geometry // boost::polygon::polygon_with_holes_data -> boost::geometry::polygon // pair{begin_holes, begin_holes} -> interior_proxy #include #include #include namespace boost { namespace geometry { namespace adapt { namespace bp { // Polygon should implement the boost::polygon::polygon_with_holes_concept // Specify constness in the template parameter if necessary template struct holes_proxy { typedef ring_proxy < typename boost::mpl::if_ < typename boost::is_const, Polygon const, Polygon >::type > proxy_type; typedef hole_iterator iterator_type; // The next line does not work probably because coordinate_type is part of the // polygon_traits, but not of the polygon_with_holes_traits // typedef typename boost::polygon::polygon_traits::coordinate_type coordinate_type; // So we use: typedef typename Polygon::coordinate_type coordinate_type; inline holes_proxy(Polygon& p) : polygon(p) {} inline void clear() { Polygon empty; // Clear the holes polygon.set_holes ( boost::polygon::begin_holes(empty), boost::polygon::end_holes(empty) ); } inline void resize(std::size_t new_size) { std::vector > temporary_copy ( boost::polygon::begin_holes(polygon), boost::polygon::end_holes(polygon) ); temporary_copy.resize(new_size); polygon.set_holes(temporary_copy.begin(), temporary_copy.end()); } template inline void push_back(Ring const& ring) { std::vector > temporary_copy ( boost::polygon::begin_holes(polygon), boost::polygon::end_holes(polygon) ); boost::polygon::polygon_data added; boost::polygon::set_points(added, ring.begin(), ring.end()); temporary_copy.push_back(added); polygon.set_holes(temporary_copy.begin(), temporary_copy.end()); } Polygon& polygon; }; // Support holes_proxy for Boost.Range ADP // Const versions template inline typename boost::geometry::adapt::bp::holes_proxy::iterator_type range_begin(boost::geometry::adapt::bp::holes_proxy const& proxy) { typename boost::geometry::adapt::bp::holes_proxy::iterator_type begin(proxy.polygon, boost::polygon::begin_holes(proxy.polygon)); return begin; } template inline typename boost::geometry::adapt::bp::holes_proxy::iterator_type range_end(boost::geometry::adapt::bp::holes_proxy const& proxy) { typename boost::geometry::adapt::bp::holes_proxy::iterator_type end(proxy.polygon, boost::polygon::end_holes(proxy.polygon)); return end; } // Mutable versions template inline typename boost::geometry::adapt::bp::holes_proxy::iterator_type range_begin(boost::geometry::adapt::bp::holes_proxy& proxy) { typename boost::geometry::adapt::bp::holes_proxy::iterator_type begin(proxy.polygon, boost::polygon::begin_holes(proxy.polygon)); return begin; } template inline typename boost::geometry::adapt::bp::holes_proxy::iterator_type range_end(boost::geometry::adapt::bp::holes_proxy& proxy) { typename boost::geometry::adapt::bp::holes_proxy::iterator_type end(proxy.polygon, boost::polygon::end_holes(proxy.polygon)); return end; } }} namespace traits { template struct rvalue_type > { typedef adapt::bp::holes_proxy type; }; template struct clear > { static inline void apply(adapt::bp::holes_proxy proxy) { proxy.clear(); } }; template struct resize > { static inline void apply(adapt::bp::holes_proxy proxy, std::size_t new_size) { proxy.resize(new_size); } }; template struct push_back > { template static inline void apply(adapt::bp::holes_proxy proxy, Ring const& ring) { proxy.push_back(ring); } }; } // namespace traits }} // Specialize holes_proxy for Boost.Range namespace boost { template struct range_mutable_iterator > { typedef typename geometry::adapt::bp::holes_proxy::iterator_type type; }; template struct range_const_iterator > { typedef typename geometry::adapt::bp::holes_proxy::iterator_type type; }; } // namespace boost #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLES_PROXY_HPP point.hpp000444000765000024 470512161110665 30433 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_polygon// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POINT_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POINT_HPP // Adapts Geometries from Boost.Polygon for usage in Boost.Geometry // boost::polygon::point_data -> boost::geometry::point #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef point_tag type; }; template struct coordinate_type > { typedef CoordinateType type; }; template struct coordinate_system > { typedef cs::cartesian type; }; template struct dimension > : boost::mpl::int_<2> {}; template struct access, 0> { typedef boost::polygon::point_data point_type; static inline CoordinateType get(point_type const& p) { return p.x(); } static inline void set(point_type& p, CoordinateType const& value) { p.x(value); } }; template struct access, 1> { typedef boost::polygon::point_data point_type; static inline CoordinateType get(point_type const& p) { return p.y(); } static inline void set(point_type& p, CoordinateType const& value) { p.y(value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POINT_HPP polygon.hpp000444000765000024 664712161110654 30776 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_polygon// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POLYGON_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POLYGON_HPP // Adapts Geometries from Boost.Polygon for usage in Boost.Geometry // boost::polygon::polygon_with_holes_data -> boost::geometry::polygon #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef polygon_tag type; }; template struct ring_const_type > { typedef adapt::bp::ring_proxy const> type; }; template struct ring_mutable_type > { typedef adapt::bp::ring_proxy > type; }; template struct interior_const_type > { typedef adapt::bp::holes_proxy const> type; }; template struct interior_mutable_type > { typedef adapt::bp::holes_proxy > type; }; template struct exterior_ring > { typedef boost::polygon::polygon_with_holes_data polygon_type; typedef adapt::bp::ring_proxy proxy; typedef adapt::bp::ring_proxy const_proxy; static inline proxy get(polygon_type& p) { return proxy(p); } static inline const_proxy get(polygon_type const& p) { return const_proxy(p); } }; template struct interior_rings > { typedef boost::polygon::polygon_with_holes_data polygon_type; typedef adapt::bp::holes_proxy proxy; typedef adapt::bp::holes_proxy const_proxy; static inline proxy get(polygon_type& p) { return proxy(p); } static inline const_proxy get(polygon_type const& p) { return const_proxy(p); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POLYGON_HPP ring.hpp000444000765000024 1125012161110637 30251 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_polygon// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_HPP // Adapts Geometries from Boost.Polygon for usage in Boost.Geometry // boost::polygon::polygon_data -> boost::geometry::ring #include #include #include #include #include #include #include #include #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace boost { namespace geometry { namespace traits { template struct tag > { typedef ring_tag type; }; template struct clear > { static inline void apply(boost::polygon::polygon_data& data) { // There is no "clear" function but we can assign // a newly (and therefore empty) constructed polygon boost::polygon::assign(data, boost::polygon::polygon_data()); } }; template struct push_back > { typedef boost::polygon::point_data point_type; static inline void apply(boost::polygon::polygon_data& data, point_type const& point) { // Boost.Polygon's polygons are not appendable. So create a temporary vector, // add a record and set it to the original. Of course: this is not efficient. // But there seems no other way (without using a wrapper) std::vector temporary_vector ( boost::polygon::begin_points(data), boost::polygon::end_points(data) ); temporary_vector.push_back(point); data.set(temporary_vector.begin(), temporary_vector.end()); } }; } // namespace traits }} // namespace boost::geometry // Adapt Boost.Polygon's polygon_data to Boost.Range // This just translates to // polygon_data.begin() and polygon_data.end() namespace boost { template struct range_mutable_iterator > { typedef typename boost::polygon::polygon_traits < boost::polygon::polygon_data >::iterator_type type; }; template struct range_const_iterator > { typedef typename boost::polygon::polygon_traits < boost::polygon::polygon_data >::iterator_type type; }; template struct range_size > { typedef std::size_t type; }; } // namespace boost // Support Boost.Polygon's polygon_data for Boost.Range ADP namespace boost { namespace polygon { template inline typename polygon_traits < polygon_data >::iterator_type range_begin(polygon_data& polygon) { return polygon.begin(); } template inline typename polygon_traits < polygon_data >::iterator_type range_begin(polygon_data const& polygon) { return polygon.begin(); } template inline typename polygon_traits < polygon_data >::iterator_type range_end(polygon_data& polygon) { return polygon.end(); } template inline typename polygon_traits < polygon_data >::iterator_type range_end(polygon_data const& polygon) { return polygon.end(); } template inline std::size_t range_calculate_size(polygon_data const& polygon) { return polygon.size(); } }} #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_HPP ring_proxy.hpp000444000765000024 1733012161110673 31517 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_polygon// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_PROXY_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_PROXY_HPP // Adapts Geometries from Boost.Polygon for usage in Boost.Geometry // boost::polygon::polygon_with_holes_data -> boost::geometry::polygon // pair{begin_points, end_points} -> ring_proxy #include #include namespace boost { namespace geometry { namespace adapt { namespace bp { namespace detail { template struct modify {}; template <> struct modify { template static inline void push_back(Ring& ring, Point const& point) { // Boost.Polygon's polygons are not appendable. So create a temporary vector, // add a record and set it to the original. Of course: this is not efficient. // But there seems no other way (without using a wrapper) std::vector temporary_vector ( boost::polygon::begin_points(ring), boost::polygon::end_points(ring) ); temporary_vector.push_back(point); boost::polygon::set_points(ring, temporary_vector.begin(), temporary_vector.end()); } }; template <> struct modify { template static inline void push_back(Ring& ring, Point const& point) { } }; } // Polygon should implement the boost::polygon::polygon_with_holes_concept // Specify constness in the template parameter if necessary template class ring_proxy { public : typedef typename boost::polygon::polygon_traits < typename boost::remove_const::type >::iterator_type iterator_type; typedef typename boost::polygon::polygon_with_holes_traits < typename boost::remove_const::type >::iterator_holes_type hole_iterator_type; static const bool is_mutable = !boost::is_const::type::value; inline ring_proxy(Polygon& p) : m_polygon_pointer(&p) , m_do_hole(false) {} // Constructor used from hole_iterator inline ring_proxy(Polygon& p, hole_iterator_type hole_it) : m_polygon_pointer(&p) , m_do_hole(true) , m_hole_it(hole_it) {} // Default constructor, for mutable polygons / appending (interior) rings inline ring_proxy() : m_polygon_pointer(&m_polygon_for_default_constructor) , m_do_hole(false) {} iterator_type begin() const { return m_do_hole ? boost::polygon::begin_points(*m_hole_it) : boost::polygon::begin_points(*m_polygon_pointer) ; } iterator_type begin() { return m_do_hole ? boost::polygon::begin_points(*m_hole_it) : boost::polygon::begin_points(*m_polygon_pointer) ; } iterator_type end() const { return m_do_hole ? boost::polygon::end_points(*m_hole_it) : boost::polygon::end_points(*m_polygon_pointer) ; } iterator_type end() { return m_do_hole ? boost::polygon::end_points(*m_hole_it) : boost::polygon::end_points(*m_polygon_pointer) ; } // Mutable void clear() { Polygon p; if (m_do_hole) { // Does NOT work see comment above } else { boost::polygon::set_points(*m_polygon_pointer, boost::polygon::begin_points(p), boost::polygon::end_points(p)); } } void resize(std::size_t new_size) { if (m_do_hole) { // Does NOT work see comment above } else { // TODO: implement this by resizing the container } } template void push_back(Point const& point) { if (m_do_hole) { //detail::modify::push_back(*m_hole_it, point); //std::cout << "HOLE: " << typeid(*m_hole_it).name() << std::endl; //std::cout << "HOLE: " << typeid(m_hole_it).name() << std::endl; //std::cout << "HOLE: " << typeid(hole_iterator_type).name() << std::endl; // Note, ths does NOT work because hole_iterator_type is defined // as a const_iterator by Boost.Polygon } else { detail::modify::push_back(*m_polygon_pointer, point); } } private : Polygon* m_polygon_pointer; bool m_do_hole; hole_iterator_type m_hole_it; Polygon m_polygon_for_default_constructor; }; // Support geometry::adapt::bp::ring_proxy for Boost.Range ADP template inline typename boost::geometry::adapt::bp::ring_proxy::iterator_type range_begin(boost::geometry::adapt::bp::ring_proxy& proxy) { return proxy.begin(); } template inline typename boost::geometry::adapt::bp::ring_proxy::iterator_type range_begin(boost::geometry::adapt::bp::ring_proxy const& proxy) { return proxy.begin(); } template inline typename boost::geometry::adapt::bp::ring_proxy::iterator_type range_end(boost::geometry::adapt::bp::ring_proxy& proxy) { return proxy.end(); } template inline typename boost::geometry::adapt::bp::ring_proxy::iterator_type range_end(boost::geometry::adapt::bp::ring_proxy const& proxy) { return proxy.end(); } }} // namespace adapt::bp namespace traits { template struct tag > { typedef ring_tag type; }; template struct rvalue_type > { typedef adapt::bp::ring_proxy type; }; template struct clear > { static inline void apply(adapt::bp::ring_proxy proxy) { proxy.clear(); } }; template struct resize > { static inline void apply(adapt::bp::ring_proxy proxy, std::size_t new_size) { proxy.resize(new_size); } }; template struct push_back > { static inline void apply(adapt::bp::ring_proxy proxy, typename boost::polygon::polygon_traits::point_type const& point) { proxy.push_back(point); } }; } // namespace traits }} // namespace boost::geometry // Specialize ring_proxy for Boost.Range namespace boost { template struct range_mutable_iterator > { typedef typename geometry::adapt::bp::ring_proxy::iterator_type type; }; template struct range_const_iterator > { typedef typename geometry::adapt::bp::ring_proxy::iterator_type type; }; } // namespace boost #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_PROXY_HPP boost_range000755000765000024 012161110675 26034 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adaptedadjacent_filtered.hpp000444000765000024 217312161110610 32321 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_range// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_ADJACENT_FILTERED_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_ADJACENT_FILTERED_HPP #include #include #include namespace boost { namespace geometry { namespace traits { template #if BOOST_VERSION > 104500 struct tag > #else struct tag > #endif { typedef typename geometry::tag::type type; }; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_ADJACENT_FILTERED_HPP filtered.hpp000444000765000024 203112161110651 30466 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_range// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_FILTERED_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_FILTERED_HPP #include #include #include namespace boost { namespace geometry { namespace traits { template #if BOOST_VERSION > 104500 struct tag > #else struct tag > #endif { typedef typename geometry::tag::type type; }; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_FILTERED_HPP reversed.hpp000444000765000024 177112161110675 30527 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_range// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_REVERSED_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_REVERSED_HPP #include #include #include namespace boost { namespace geometry { namespace traits { template #if BOOST_VERSION > 104500 struct tag > #else struct tag > #endif { typedef typename geometry::tag::type type; }; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_REVERSED_HPP sliced.hpp000444000765000024 162312161110611 30135 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_range// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_SLICED_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_SLICED_HPP #include #include #include namespace boost { namespace geometry { namespace traits { template struct tag > { typedef typename geometry::tag::type type; }; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_SLICED_HPP strided.hpp000444000765000024 161612161110645 30341 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_range// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_STRIDED_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_STRIDED_HPP #include #include #include namespace boost { namespace geometry { namespace traits { template struct tag > { typedef typename geometry::tag::type type; }; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_STRIDED_HPP uniqued.hpp000444000765000024 176312161110603 30352 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/adapted/boost_range// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_UNIQUED_HPP #define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_UNIQUED_HPP #include #include #include namespace boost { namespace geometry { namespace traits { template #if BOOST_VERSION > 104500 struct tag > #else struct tag > #endif { typedef typename geometry::tag::type type; }; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_UNIQUED_HPP concepts000755000765000024 012161110675 23746 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometriesbox_concept.hpp000444000765000024 770512161110631 27120 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_BOX_CONCEPT_HPP #define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_BOX_CONCEPT_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Box concept \ingroup concepts \par Formal definition: The box concept is defined as following: - there must be a specialization of traits::tag defining box_tag as type - there must be a specialization of traits::point_type to define the underlying point type (even if it does not consist of points, it should define this type, to indicate the points it can work with) - there must be a specialization of traits::indexed_access, per index (min_corner, max_corner) and per dimension, with two functions: - get to get a coordinate value - set to set a coordinate value (this one is not checked for ConstBox) */ template class Box { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename point_type::type point_type; template < std::size_t Index, std::size_t Dimension, std::size_t DimensionCount > struct dimension_checker { static void apply() { Geometry* b = 0; geometry::set(*b, geometry::get(*b)); dimension_checker::apply(); } }; template struct dimension_checker { static void apply() {} }; public : BOOST_CONCEPT_USAGE(Box) { static const std::size_t n = dimension::type::value; dimension_checker::apply(); dimension_checker::apply(); } #endif }; /*! \brief Box concept (const version) \ingroup const_concepts \details The ConstBox concept apply the same as the Box concept, but does not apply write access. */ template class ConstBox { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename point_type::type point_type; typedef typename coordinate_type::type coordinate_type; template < std::size_t Index, std::size_t Dimension, std::size_t DimensionCount > struct dimension_checker { static void apply() { const Geometry* b = 0; coordinate_type coord(geometry::get(*b)); boost::ignore_unused_variable_warning(coord); dimension_checker::apply(); } }; template struct dimension_checker { static void apply() {} }; public : BOOST_CONCEPT_USAGE(ConstBox) { static const std::size_t n = dimension::type::value; dimension_checker::apply(); dimension_checker::apply(); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_BOX_CONCEPT_HPP check.hpp000444000765000024 750712161110675 25702 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_CHECK_HPP #define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_CHECK_HPP #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace concept_check { template class check { BOOST_CONCEPT_ASSERT((Concept )); }; }} // namespace detail::concept_check #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct check {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; } // namespace dispatch #endif namespace concept { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct checker : dispatch::check < typename tag::type, Geometry, IsConst > {}; } #endif // DOXYGEN_NO_DETAIL /*! \brief Checks, in compile-time, the concept of any geometry \ingroup concepts */ template inline void check() { detail::checker::type::value> c; boost::ignore_unused_variable_warning(c); } /*! \brief Checks, in compile-time, the concept of two geometries, and if they have equal dimensions \ingroup concepts */ template inline void check_concepts_and_equal_dimensions() { check(); check(); assert_dimension_equal(); } } // namespace concept }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_CHECK_HPP linestring_concept.hpp000444000765000024 714612161110602 30503 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_LINESTRING_CONCEPT_HPP #define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_LINESTRING_CONCEPT_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Linestring concept \ingroup concepts \par Formal definition: The linestring concept is defined as following: - there must be a specialization of traits::tag defining linestring_tag as type - it must behave like a Boost.Range - it must implement a std::back_insert_iterator - either by implementing push_back - or by specializing std::back_insert_iterator \note to fulfill the concepts, no traits class has to be specialized to define the point type. \par Example: A custom linestring, defining the necessary specializations to fulfill to the concept. Suppose that the following linestring is defined: \dontinclude doxygen_5.cpp \skip custom_linestring1 \until }; It can then be adapted to the concept as following: \dontinclude doxygen_5.cpp \skip adapt custom_linestring1 \until }} \note - There is also the registration macro BOOST_GEOMETRY_REGISTER_LINESTRING - For registration of std::vector

(and deque, and list) it is enough to include the header-file geometries/adapted/std_as_linestring.hpp. That registers a vector as a linestring (so it cannot be registered as a linear ring then, in the same source code). */ template class Linestring { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename point_type::type point_type; BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(Linestring) { Geometry* ls = 0; traits::clear::apply(*ls); traits::resize::apply(*ls, 0); point_type* point = 0; traits::push_back::apply(*ls, *point); } #endif }; /*! \brief Linestring concept (const version) \ingroup const_concepts \details The ConstLinestring concept check the same as the Linestring concept, but does not check write access. */ template class ConstLinestring { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename point_type::type point_type; BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); //BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); // Relaxed the concept. BOOST_CONCEPT_ASSERT( (boost::ForwardRangeConcept) ); public : BOOST_CONCEPT_USAGE(ConstLinestring) { } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_LINESTRING_CONCEPT_HPP point_concept.hpp000444000765000024 1151012161110654 27473 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POINT_CONCEPT_HPP #define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POINT_CONCEPT_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Point concept. \ingroup concepts \par Formal definition: The point concept is defined as following: - there must be a specialization of traits::tag defining point_tag as type - there must be a specialization of traits::coordinate_type defining the type of its coordinates - there must be a specialization of traits::coordinate_system defining its coordinate system (cartesian, spherical, etc) - there must be a specialization of traits::dimension defining its number of dimensions (2, 3, ...) (derive it conveniently from boost::mpl::int_<X> for X-D) - there must be a specialization of traits::access, per dimension, with two functions: - \b get to get a coordinate value - \b set to set a coordinate value (this one is not checked for ConstPoint) \par Example: A legacy point, defining the necessary specializations to fulfil to the concept. Suppose that the following point is defined: \dontinclude doxygen_5.cpp \skip legacy_point1 \until }; It can then be adapted to the concept as following: \dontinclude doxygen_5.cpp \skip adapt legacy_point1 \until }} Note that it is done like above to show the system. Users will normally use the registration macro. \par Example: A read-only legacy point, using a macro to fulfil to the ConstPoint concept. It cannot be modified by the library but can be used in all algorithms where points are not modified. The point looks like the following: \dontinclude doxygen_5.cpp \skip legacy_point2 \until }; It uses the macro as following: \dontinclude doxygen_5.cpp \skip adapt legacy_point2 \until end adaptation */ template class Point { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename coordinate_type::type ctype; typedef typename coordinate_system::type csystem; enum { ccount = dimension::value }; template struct dimension_checker { static void apply() { P* p = 0; geometry::set(*p, geometry::get(*p)); dimension_checker::apply(); } }; template struct dimension_checker { static void apply() {} }; public: /// BCCL macro to apply the Point concept BOOST_CONCEPT_USAGE(Point) { dimension_checker::apply(); } #endif }; /*! \brief point concept (const version). \ingroup const_concepts \details The ConstPoint concept apply the same as the Point concept, but does not apply write access. */ template class ConstPoint { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename coordinate_type::type ctype; typedef typename coordinate_system::type csystem; enum { ccount = dimension::value }; template struct dimension_checker { static void apply() { const P* p = 0; ctype coord(geometry::get(*p)); boost::ignore_unused_variable_warning(coord); dimension_checker::apply(); } }; template struct dimension_checker { static void apply() {} }; public: /// BCCL macro to apply the ConstPoint concept BOOST_CONCEPT_USAGE(ConstPoint) { dimension_checker::apply(); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POINT_CONCEPT_HPP polygon_concept.hpp000444000765000024 1102712161110645 30034 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYGON_CONCEPT_HPP #define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYGON_CONCEPT_HPP #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Checks polygon concept \ingroup concepts */ template class Polygon { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename boost::remove_const::type polygon_type; typedef typename traits::ring_const_type::type ring_const_type; typedef typename traits::ring_mutable_type::type ring_mutable_type; typedef typename traits::interior_const_type::type interior_const_type; typedef typename traits::interior_mutable_type::type interior_mutable_type; typedef typename point_type::type point_type; typedef typename ring_type::type ring_type; BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (concept::Ring) ); //BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); struct checker { static inline void apply() { polygon_type* poly = 0; polygon_type const* cpoly = poly; ring_mutable_type e = traits::exterior_ring::get(*poly); interior_mutable_type i = traits::interior_rings::get(*poly); ring_const_type ce = traits::exterior_ring::get(*cpoly); interior_const_type ci = traits::interior_rings::get(*cpoly); boost::ignore_unused_variable_warning(e); boost::ignore_unused_variable_warning(i); boost::ignore_unused_variable_warning(ce); boost::ignore_unused_variable_warning(ci); boost::ignore_unused_variable_warning(poly); boost::ignore_unused_variable_warning(cpoly); } }; public: BOOST_CONCEPT_USAGE(Polygon) { checker::apply(); } #endif }; /*! \brief Checks polygon concept (const version) \ingroup const_concepts */ template class ConstPolygon { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename boost::remove_const::type const_polygon_type; typedef typename traits::ring_const_type::type ring_const_type; typedef typename traits::interior_const_type::type interior_const_type; typedef typename point_type::type point_type; typedef typename ring_type::type ring_type; BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT( (concept::ConstRing) ); ////BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); struct checker { static inline void apply() { const_polygon_type const* cpoly = 0; ring_const_type ce = traits::exterior_ring::get(*cpoly); interior_const_type ci = traits::interior_rings::get(*cpoly); boost::ignore_unused_variable_warning(ce); boost::ignore_unused_variable_warning(ci); boost::ignore_unused_variable_warning(cpoly); } }; public: BOOST_CONCEPT_USAGE(ConstPolygon) { checker::apply(); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYGON_CONCEPT_HPP ring_concept.hpp000444000765000024 562512161110610 27263 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_RING_CONCEPT_HPP #define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_RING_CONCEPT_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief ring concept \ingroup concepts \par Formal definition: The ring concept is defined as following: - there must be a specialization of traits::tag defining ring_tag as type - it must behave like a Boost.Range - there can optionally be a specialization of traits::point_order defining the order or orientation of its points, clockwise or counterclockwise. - it must implement a std::back_insert_iterator (This is the same as the for the concept Linestring, and described there) \note to fulfill the concepts, no traits class has to be specialized to define the point type. */ template class Ring { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename point_type::type point_type; BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(Ring) { Geometry* ring = 0; traits::clear::apply(*ring); traits::resize::apply(*ring, 0); point_type* point = 0; traits::push_back::apply(*ring, *point); } #endif }; /*! \brief (linear) ring concept (const version) \ingroup const_concepts \details The ConstLinearRing concept check the same as the Geometry concept, but does not check write access. */ template class ConstRing { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename point_type::type point_type; BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(ConstRing) { } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_RING_CONCEPT_HPP segment_concept.hpp000444000765000024 1021312161110650 27777 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_SEGMENT_CONCEPT_HPP #define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_SEGMENT_CONCEPT_HPP #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Segment concept. \ingroup concepts \details Formal definition: The segment concept is defined as following: - there must be a specialization of traits::tag defining segment_tag as type - there must be a specialization of traits::point_type to define the underlying point type (even if it does not consist of points, it should define this type, to indicate the points it can work with) - there must be a specialization of traits::indexed_access, per index and per dimension, with two functions: - get to get a coordinate value - set to set a coordinate value (this one is not checked for ConstSegment) \note The segment concept is similar to the box concept, defining another tag. However, the box concept assumes the index as min_corner, max_corner, while for the segment concept there is no assumption. */ template class Segment { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename point_type::type point_type; BOOST_CONCEPT_ASSERT( (concept::Point) ); template struct dimension_checker { static void apply() { Geometry* s = 0; geometry::set(*s, geometry::get(*s)); dimension_checker::apply(); } }; template struct dimension_checker { static void apply() {} }; public : BOOST_CONCEPT_USAGE(Segment) { static const size_t n = dimension::type::value; dimension_checker<0, 0, n>::apply(); dimension_checker<1, 0, n>::apply(); } #endif }; /*! \brief Segment concept (const version). \ingroup const_concepts \details The ConstSegment concept verifies the same as the Segment concept, but does not verify write access. */ template class ConstSegment { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename point_type::type point_type; typedef typename coordinate_type::type coordinate_type; BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); template struct dimension_checker { static void apply() { const Geometry* s = 0; coordinate_type coord(geometry::get(*s)); boost::ignore_unused_variable_warning(coord); dimension_checker::apply(); } }; template struct dimension_checker { static void apply() {} }; public : BOOST_CONCEPT_USAGE(ConstSegment) { static const size_t n = dimension::type::value; dimension_checker<0, 0, n>::apply(); dimension_checker<1, 0, n>::apply(); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_SEGMENT_CONCEPT_HPP register000755000765000024 012161110657 23754 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometriesbox.hpp000444000765000024 1462612161110647 25442 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/register// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_BOX_HPP #define BOOST_GEOMETRY_GEOMETRIES_REGISTER_BOX_HPP #ifndef DOXYGEN_NO_SPECIALIZATIONS #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS(Box, Point, MinCorner, MaxCorner) \ template \ struct indexed_access \ { \ typedef typename coordinate_type::type ct; \ static inline ct get(Box const& b) \ { return geometry::get(b. MinCorner); } \ static inline void set(Box& b, ct const& value) \ { geometry::set(b. MinCorner, value); } \ }; \ template \ struct indexed_access \ { \ typedef typename coordinate_type::type ct; \ static inline ct get(Box const& b) \ { return geometry::get(b. MaxCorner); } \ static inline void set(Box& b, ct const& value) \ { geometry::set(b. MaxCorner, value); } \ }; #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_TEMPLATED(Box, MinCorner, MaxCorner) \ template \ struct indexed_access, min_corner, D> \ { \ typedef typename coordinate_type

::type ct; \ static inline ct get(Box

const& b) \ { return geometry::get(b. MinCorner); } \ static inline void set(Box

& b, ct const& value) \ { geometry::set(b. MinCorner, value); } \ }; \ template \ struct indexed_access, max_corner, D> \ { \ typedef typename coordinate_type

::type ct; \ static inline ct get(Box

const& b) \ { return geometry::get(b. MaxCorner); } \ static inline void set(Box

& b, ct const& value) \ { geometry::set(b. MaxCorner, value); } \ }; #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_4VALUES(Box, Point, Left, Bottom, Right, Top) \ template <> struct indexed_access \ { \ typedef coordinate_type::type ct; \ static inline ct get(Box const& b) { return b. Left; } \ static inline void set(Box& b, ct const& value) { b. Left = value; } \ }; \ template <> struct indexed_access \ { \ typedef coordinate_type::type ct; \ static inline ct get(Box const& b) { return b. Bottom; } \ static inline void set(Box& b, ct const& value) { b. Bottom = value; } \ }; \ template <> struct indexed_access \ { \ typedef coordinate_type::type ct; \ static inline ct get(Box const& b) { return b. Right; } \ static inline void set(Box& b, ct const& value) { b. Right = value; } \ }; \ template <> struct indexed_access \ { \ typedef coordinate_type::type ct; \ static inline ct get(Box const& b) { return b. Top; } \ static inline void set(Box& b, ct const& value) { b. Top = value; } \ }; #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, PointType) \ template<> struct tag { typedef box_tag type; }; \ template<> struct point_type { typedef PointType type; }; #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS_TEMPLATED(Box) \ template struct tag > { typedef box_tag type; }; \ template struct point_type > { typedef P type; }; #endif // DOXYGEN_NO_SPECIALIZATIONS /*! \brief \brief_macro{box} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_BOX, box} The box may contain template parameters, which must be specified then. \param Box \param_macro_type{Box} \param Point Point type on which box is based. Might be two or three-dimensional \param MinCorner minimum corner (should be public member or method) \param MaxCorner maximum corner (should be public member or method) \qbk{ [heading Example] [register_box] [register_box_output] } */ #define BOOST_GEOMETRY_REGISTER_BOX(Box, Point, MinCorner, MaxCorner) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, Point) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS(Box, Point, MinCorner, MaxCorner) \ }}} /*! \brief \brief_macro{box} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED, box} \details_macro_templated{box, point} \param Box \param_macro_type{Box} \param MinCorner minimum corner (should be public member or method) \param MaxCorner maximum corner (should be public member or method) \qbk{ [heading Example] [register_box_templated] [register_box_templated_output] } */ #define BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED(Box, MinCorner, MaxCorner) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS_TEMPLATED(Box) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_TEMPLATED(Box, MinCorner, MaxCorner) \ }}} /*! \brief \brief_macro{box} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES, box} \param Box \param_macro_type{Box} \param Point Point type reported as point_type by box. Must be two dimensional. Note that these box tyeps do not contain points, but they must have a related point_type \param Left Left side (must be public member or method) \param Bottom Bottom side (must be public member or method) \param Right Right side (must be public member or method) \param Top Top side (must be public member or method) \qbk{ [heading Example] [register_box_2d_4values] [register_box_2d_4values_output] } */ #define BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES(Box, Point, Left, Bottom, Right, Top) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, Point) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_4VALUES(Box, Point, Left, Bottom, Right, Top) \ }}} // CONST versions are for boxes probably not that common. Postponed. #endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_BOX_HPP linestring.hpp000444000765000024 377212161110636 27006 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/register// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_LINESTRING_HPP #define BOOST_GEOMETRY_GEOMETRIES_REGISTER_LINESTRING_HPP #include #include /*! \brief \brief_macro{linestring} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_LINESTRING, linestring} The linestring may contain template parameters, which must be specified then. \param Linestring \param_macro_type{linestring} \qbk{ [heading Example] [register_linestring] [register_linestring_output] } */ #define BOOST_GEOMETRY_REGISTER_LINESTRING(Linestring) \ namespace boost { namespace geometry { namespace traits { \ template<> struct tag { typedef linestring_tag type; }; \ }}} /*! \brief \brief_macro{templated linestring} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED, templated linestring} \details_macro_templated{linestring, point} \param Linestring \param_macro_type{linestring (without template parameters)} \qbk{ [heading Example] [register_linestring_templated] [register_linestring_templated_output] } */ #define BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(Linestring) \ namespace boost { namespace geometry { namespace traits { \ template struct tag< Linestring

> { typedef linestring_tag type; }; \ }}} #endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_LINESTRING_HPP point.hpp000444000765000024 2033312161110614 25765 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/register// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP #define BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP #include #ifndef DOXYGEN_NO_SPECIALIZATIONS // Starting point, specialize basic traits necessary to register a point #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, Dim, CoordinateType, CoordinateSystem) \ template<> struct tag { typedef point_tag type; }; \ template<> struct dimension : boost::mpl::int_ {}; \ template<> struct coordinate_type { typedef CoordinateType type; }; \ template<> struct coordinate_system { typedef CoordinateSystem type; }; // Specialize access class per dimension #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, Dim, CoordinateType, Get, Set) \ template<> struct access \ { \ static inline CoordinateType get(Point const& p) { return p. Get; } \ static inline void set(Point& p, CoordinateType const& value) { p. Set = value; } \ }; // Const version #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, Dim, CoordinateType, Get) \ template<> struct access \ { \ static inline CoordinateType get(Point const& p) { return p. Get; } \ }; // Getter/setter version #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, Dim, CoordinateType, Get, Set) \ template<> struct access \ { \ static inline CoordinateType get(Point const& p) \ { return p. Get (); } \ static inline void set(Point& p, CoordinateType const& value) \ { p. Set ( value ); } \ }; #endif // DOXYGEN_NO_SPECIALIZATIONS /*! \brief \brief_macro{2D point type} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D, two-dimensional point type} \param Point \param_macro_type{Point} \param CoordinateType \param_macro_coortype{point} \param CoordinateSystem \param_macro_coorsystem \param Field0 \param_macro_member{\macro_x} \param Field1 \param_macro_member{\macro_y} \qbk{[include reference/geometries/register/point.qbk]} */ #define BOOST_GEOMETRY_REGISTER_POINT_2D(Point, CoordinateType, CoordinateSystem, Field0, Field1) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 0, CoordinateType, Field0, Field0) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 1, CoordinateType, Field1, Field1) \ }}} /*! \brief \brief_macro{3D point type} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D, three-dimensional point type} \param Point \param_macro_type{Point} \param CoordinateType \param_macro_coortype{point} \param CoordinateSystem \param_macro_coorsystem \param Field0 \param_macro_member{\macro_x} \param Field1 \param_macro_member{\macro_y} \param Field2 \param_macro_member{\macro_z} */ #define BOOST_GEOMETRY_REGISTER_POINT_3D(Point, CoordinateType, CoordinateSystem, Field0, Field1, Field2) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 0, CoordinateType, Field0, Field0) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 1, CoordinateType, Field1, Field1) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 2, CoordinateType, Field2, Field2) \ }}} /*! \brief \brief_macro{2D point type} \brief_macro_const \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D_CONST, two-dimensional point type}. \details_macro_const \param Point \param_macro_type{Point} \param CoordinateType \param_macro_coortype{point} \param CoordinateSystem \param_macro_coorsystem \param Field0 \param_macro_member{\macro_x} \param Field1 \param_macro_member{\macro_y} */ #define BOOST_GEOMETRY_REGISTER_POINT_2D_CONST(Point, CoordinateType, CoordinateSystem, Field0, Field1) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 0, CoordinateType, Field0) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 1, CoordinateType, Field1) \ }}} /*! \brief \brief_macro{3D point type} \brief_macro_const \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D_CONST, three-dimensional point type}. \details_macro_const \param Point \param_macro_type{Point} \param CoordinateType \param_macro_coortype{point} \param CoordinateSystem \param_macro_coorsystem \param Field0 \param_macro_member{\macro_x} \param Field1 \param_macro_member{\macro_y} \param Field2 \param_macro_member{\macro_z} */ #define BOOST_GEOMETRY_REGISTER_POINT_3D_CONST(Point, CoordinateType, CoordinateSystem, Field0, Field1, Field2) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 0, CoordinateType, Field0) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 1, CoordinateType, Field1) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 2, CoordinateType, Field2) \ }}} /*! \brief \brief_macro{2D point type} \brief_macro_getset \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET, two-dimensional point type}. \details_macro_getset \param Point \param_macro_type{Point} \param CoordinateType \param_macro_coortype{point} \param CoordinateSystem \param_macro_coorsystem \param Get0 \param_macro_getset{get, \macro_x} \param Get1 \param_macro_getset{get, \macro_y} \param Set0 \param_macro_getset{set, \macro_x} \param Set1 \param_macro_getset{set, \macro_y} */ #define BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(Point, CoordinateType, CoordinateSystem, Get0, Get1, Set0, Set1) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 0, CoordinateType, Get0, Set0) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 1, CoordinateType, Get1, Set1) \ }}} /*! \brief \brief_macro{3D point type} \brief_macro_getset \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET, three-dimensional point type}. \details_macro_getset \param Point \param_macro_type{Point} \param CoordinateType \param_macro_coortype{point} \param CoordinateSystem \param_macro_coorsystem \param Get0 \param_macro_getset{get, \macro_x} \param Get1 \param_macro_getset{get, \macro_y} \param Get2 \param_macro_getset{get, \macro_z} \param Set0 \param_macro_getset{set, \macro_x} \param Set1 \param_macro_getset{set, \macro_y} \param Set2 \param_macro_getset{set, \macro_z} */ #define BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET(Point, CoordinateType, CoordinateSystem, Get0, Get1, Get2, Set0, Set1, Set2) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 0, CoordinateType, Get0, Set0) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 1, CoordinateType, Get1, Set1) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 2, CoordinateType, Get2, Set2) \ }}} #endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP ring.hpp000444000765000024 353012161110657 25562 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/register// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_RING_HPP #define BOOST_GEOMETRY_GEOMETRIES_REGISTER_RING_HPP #include #include /*! \brief \brief_macro{ring} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_RING, ring} The ring may contain template parameters, which must be specified then. \param Ring \param_macro_type{ring} \qbk{ [heading Example] [register_ring] [register_ring_output] } */ #define BOOST_GEOMETRY_REGISTER_RING(Ring) \ namespace boost { namespace geometry { namespace traits { \ template<> struct tag { typedef ring_tag type; }; \ }}} /*! \brief \brief_macro{templated ring} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_RING_TEMPLATED, templated ring} \details_macro_templated{ring, point} \param Ring \param_macro_type{ring (without template parameters)} \qbk{ [heading Example] [register_ring_templated] [register_ring_templated_output] } */ #define BOOST_GEOMETRY_REGISTER_RING_TEMPLATED(Ring) \ namespace boost { namespace geometry { namespace traits { \ template struct tag< Ring

> { typedef ring_tag type; }; \ }}} #endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_RING_HPP segment.hpp000444000765000024 1205212161110604 26274 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/geometries/register// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_SEGMENT_HPP #define BOOST_GEOMETRY_GEOMETRIES_REGISTER_SEGMENT_HPP #ifndef DOXYGEN_NO_SPECIALIZATIONS #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS(Segment, Point, Index0, Index1) \ template \ struct indexed_access \ { \ typedef typename coordinate_type::type ct; \ static inline ct get(Segment const& b) \ { return geometry::get(b. Index0); } \ static inline void set(Segment& b, ct const& value) \ { geometry::set(b. Index0, value); } \ }; \ template \ struct indexed_access \ { \ typedef typename coordinate_type::type ct; \ static inline ct get(Segment const& b) \ { return geometry::get(b. Index1); } \ static inline void set(Segment& b, ct const& value) \ { geometry::set(b. Index1, value); } \ }; #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS_TEMPLATIZED(Segment, Index0, Index1) \ template \ struct indexed_access, min_corner, D> \ { \ typedef typename coordinate_type

::type ct; \ static inline ct get(Segment

const& b) \ { return geometry::get(b. Index0); } \ static inline void set(Segment

& b, ct const& value) \ { geometry::set(b. Index0, value); } \ }; \ template \ struct indexed_access, max_corner, D> \ { \ typedef typename coordinate_type

::type ct; \ static inline ct get(Segment

const& b) \ { return geometry::get(b. Index1); } \ static inline void set(Segment

& b, ct const& value) \ { geometry::set(b. Index1, value); } \ }; #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS_4VALUES(Segment, Point, Left, Bottom, Right, Top) \ template <> struct indexed_access \ { \ typedef coordinate_type::type ct; \ static inline ct get(Segment const& b) { return b. Left; } \ static inline void set(Segment& b, ct const& value) { b. Left = value; } \ }; \ template <> struct indexed_access \ { \ typedef coordinate_type::type ct; \ static inline ct get(Segment const& b) { return b. Bottom; } \ static inline void set(Segment& b, ct const& value) { b. Bottom = value; } \ }; \ template <> struct indexed_access \ { \ typedef coordinate_type::type ct; \ static inline ct get(Segment const& b) { return b. Right; } \ static inline void set(Segment& b, ct const& value) { b. Right = value; } \ }; \ template <> struct indexed_access \ { \ typedef coordinate_type::type ct; \ static inline ct get(Segment const& b) { return b. Top; } \ static inline void set(Segment& b, ct const& value) { b. Top = value; } \ }; #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS(Segment, PointType) \ template<> struct tag { typedef segment_tag type; }; \ template<> struct point_type { typedef PointType type; }; #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS_TEMPLATIZED(Segment) \ template struct tag > { typedef segment_tag type; }; \ template struct point_type > { typedef P type; }; #endif // DOXYGEN_NO_SPECIALIZATIONS #define BOOST_GEOMETRY_REGISTER_SEGMENT(Segment, PointType, Index0, Index1) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS(Segment, PointType) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS(Segment, PointType, Index0, Index1) \ }}} #define BOOST_GEOMETRY_REGISTER_SEGMENT_TEMPLATIZED(Segment, Index0, Index1) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS_TEMPLATIZED(Segment) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS_TEMPLATIZED(Segment, Index0, Index1) \ }}} #define BOOST_GEOMETRY_REGISTER_SEGMENT_2D_4VALUES(Segment, PointType, Left, Bottom, Right, Top) \ namespace boost { namespace geometry { namespace traits { \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS(Segment, PointType) \ BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS_4VALUES(Segment, PointType, Left, Bottom, Right, Top) \ }}} // CONST versions are for segments probably not that common. Postponed. #endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_SEGMENT_HPP io000755000765000024 012161110622 20364 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometryio.hpp000444000765000024 310312161110603 21635 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_IO_HPP #define BOOST_GEOMETRY_IO_HPP #include #include namespace boost { namespace geometry { struct format_wkt {}; struct format_wkb {}; // TODO struct format_dsv {}; // TODO #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct read { }; template struct read { static inline void apply(Geometry& geometry, std::string const& wkt) { read_wkt::type, Geometry>::apply(wkt, geometry); } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH template inline void read(Geometry& geometry, std::string const& wkt) { geometry::concept::check(); dispatch::read::apply(geometry, wkt); } // TODO: wriite }} // namespace boost::geometry #endif // BOOST_GEOMETRY_IO_HPP dsv000755000765000024 012161110622 21160 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/iowrite.hpp000444000765000024 2454012161110622 23205 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io/dsv// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_IO_DSV_WRITE_HPP #define BOOST_GEOMETRY_IO_DSV_WRITE_HPP #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace dsv { struct dsv_settings { std::string coordinate_separator; std::string point_open; std::string point_close; std::string point_separator; std::string list_open; std::string list_close; std::string list_separator; dsv_settings(std::string const& sep , std::string const& open , std::string const& close , std::string const& psep , std::string const& lopen , std::string const& lclose , std::string const& lsep ) : coordinate_separator(sep) , point_open(open) , point_close(close) , point_separator(psep) , list_open(lopen) , list_close(lclose) , list_separator(lsep) {} }; /*! \brief Stream coordinate of a point as \ref DSV */ template struct stream_coordinate { template static inline void apply(std::basic_ostream& os, Point const& point, dsv_settings const& settings) { os << (Dimension > 0 ? settings.coordinate_separator : "") << get(point); stream_coordinate < Point, Dimension + 1, Count >::apply(os, point, settings); } }; template struct stream_coordinate { template static inline void apply(std::basic_ostream&, Point const&, dsv_settings const& ) { } }; /*! \brief Stream indexed coordinate of a box/segment as \ref DSV */ template < typename Geometry, std::size_t Index, std::size_t Dimension, std::size_t Count > struct stream_indexed { template static inline void apply(std::basic_ostream& os, Geometry const& geometry, dsv_settings const& settings) { os << (Dimension > 0 ? settings.coordinate_separator : "") << get(geometry); stream_indexed < Geometry, Index, Dimension + 1, Count >::apply(os, geometry, settings); } }; template struct stream_indexed { template static inline void apply(std::basic_ostream&, Geometry const&, dsv_settings const& ) { } }; /*! \brief Stream points as \ref DSV */ template struct dsv_point { template static inline void apply(std::basic_ostream& os, Point const& p, dsv_settings const& settings) { os << settings.point_open; stream_coordinate::type::value>::apply(os, p, settings); os << settings.point_close; } }; /*! \brief Stream ranges as DSV \note policy is used to stream prefix/postfix, enabling derived classes to override this */ template struct dsv_range { template static inline void apply(std::basic_ostream& os, Range const& range, dsv_settings const& settings) { typedef typename boost::range_iterator::type iterator_type; bool first = true; os << settings.list_open; for (iterator_type it = boost::begin(range); it != boost::end(range); ++it) { os << (first ? "" : settings.point_separator) << settings.point_open; stream_coordinate < point_type, 0, dimension::type::value >::apply(os, *it, settings); os << settings.point_close; first = false; } os << settings.list_close; } private: typedef typename boost::range_value::type point_type; }; /*! \brief Stream sequence of points as DSV-part, e.g. (1 2),(3 4) \note Used in polygon, all multi-geometries */ template struct dsv_poly { template static inline void apply(std::basic_ostream& os, Polygon const& poly, dsv_settings const& settings) { typedef typename ring_type::type ring; os << settings.list_open; dsv_range::apply(os, exterior_ring(poly), settings); typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { os << settings.list_separator; dsv_range::apply(os, *it, settings); } os << settings.list_close; } }; template struct dsv_per_index { typedef typename point_type::type point_type; template static inline void apply(std::basic_ostream& os, Geometry const& geometry, dsv_settings const& settings) { os << settings.point_open; stream_indexed < Geometry, Index, 0, dimension::type::value >::apply(os, geometry, settings); os << settings.point_close; } }; template struct dsv_indexed { typedef typename point_type::type point_type; template static inline void apply(std::basic_ostream& os, Geometry const& geometry, dsv_settings const& settings) { os << settings.list_open; dsv_per_index::apply(os, geometry, settings); os << settings.point_separator; dsv_per_index::apply(os, geometry, settings); os << settings.list_close; } }; }} // namespace detail::dsv #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct dsv {}; template struct dsv : detail::dsv::dsv_point {}; template struct dsv : detail::dsv::dsv_range {}; template struct dsv : detail::dsv::dsv_indexed {}; template struct dsv : detail::dsv::dsv_indexed {}; template struct dsv : detail::dsv::dsv_range {}; template struct dsv : detail::dsv::dsv_poly {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace dsv { // FIXME: This class is not copyable/assignable but it is used as such --mloskot template class dsv_manipulator { public: inline dsv_manipulator(Geometry const& g, dsv_settings const& settings) : m_geometry(g) , m_settings(settings) {} template inline friend std::basic_ostream& operator<<( std::basic_ostream& os, dsv_manipulator const& m) { dispatch::dsv < typename tag_cast < typename tag::type, multi_tag >::type, Geometry >::apply(os, m.m_geometry, m.m_settings); os.flush(); return os; } private: Geometry const& m_geometry; dsv_settings m_settings; }; }} // namespace detail::dsv #endif // DOXYGEN_NO_DETAIL /*! \brief Main DSV-streaming function \details DSV stands for Delimiter Separated Values. Geometries can be streamed as DSV. There are defaults for all separators. \note Useful for examples and testing purposes \note With this function GeoJSON objects can be created, using the right delimiters \ingroup utility */ template inline detail::dsv::dsv_manipulator dsv(Geometry const& geometry , std::string const& coordinate_separator = ", " , std::string const& point_open = "(" , std::string const& point_close = ")" , std::string const& point_separator = ", " , std::string const& list_open = "(" , std::string const& list_close = ")" , std::string const& list_separator = ", " ) { concept::check(); return detail::dsv::dsv_manipulator(geometry, detail::dsv::dsv_settings(coordinate_separator, point_open, point_close, point_separator, list_open, list_close, list_separator)); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_IO_DSV_WRITE_HPP wkt000755000765000024 012161110656 21200 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/ioread.hpp000444000765000024 4612612161110621 23002 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io/wkt// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_IO_WKT_READ_HPP #define BOOST_GEOMETRY_IO_WKT_READ_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Exception showing things wrong with WKT parsing \ingroup wkt */ struct read_wkt_exception : public geometry::exception { template read_wkt_exception(std::string const& msg, Iterator const& it, Iterator const& end, std::string const& wkt) : message(msg) , wkt(wkt) { if (it != end) { source = " at '"; source += it->c_str(); source += "'"; } complete = message + source + " in '" + wkt.substr(0, 100) + "'"; } read_wkt_exception(std::string const& msg, std::string const& wkt) : message(msg) , wkt(wkt) { complete = message + "' in (" + wkt.substr(0, 100) + ")"; } virtual ~read_wkt_exception() throw() {} virtual const char* what() const throw() { return complete.c_str(); } private : std::string source; std::string message; std::string wkt; std::string complete; }; #ifndef DOXYGEN_NO_DETAIL // (wkt: Well Known Text, defined by OGC for all geometries and implemented by e.g. databases (MySQL, PostGIS)) namespace detail { namespace wkt { typedef boost::tokenizer > tokenizer; template struct parsing_assigner { static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, Point& point, std::string const& wkt) { typedef typename coordinate_type::type coordinate_type; // Stop at end of tokens, or at "," ot ")" bool finished = (it == end || *it == "," || *it == ")"); try { // Initialize missing coordinates to default constructor (zero) // OR // Use lexical_cast for conversion to double/int // Note that it is much slower than atof. However, it is more standard // and in parsing the change in performance falls probably away against // the tokenizing set(point, finished ? coordinate_type() : coordinate_cast::apply(*it)); } catch(boost::bad_lexical_cast const& blc) { throw read_wkt_exception(blc.what(), it, end, wkt); } catch(std::exception const& e) { throw read_wkt_exception(e.what(), it, end, wkt); } catch(...) { throw read_wkt_exception("", it, end, wkt); } parsing_assigner::apply( (finished ? it : ++it), end, point, wkt); } }; template struct parsing_assigner { static inline void apply(tokenizer::iterator&, tokenizer::iterator, Point&, std::string const&) { } }; template inline void handle_open_parenthesis(Iterator& it, Iterator const& end, std::string const& wkt) { if (it == end || *it != "(") { throw read_wkt_exception("Expected '('", it, end, wkt); } ++it; } template inline void handle_close_parenthesis(Iterator& it, Iterator const& end, std::string const& wkt) { if (it != end && *it == ")") { ++it; } else { throw read_wkt_exception("Expected ')'", it, end, wkt); } } template inline void check_end(Iterator& it, Iterator const& end, std::string const& wkt) { if (it != end) { throw read_wkt_exception("Too much tokens", it, end, wkt); } } /*! \brief Internal, parses coordinate sequences, strings are formated like "(1 2,3 4,...)" \param it token-iterator, should be pre-positioned at "(", is post-positions after last ")" \param end end-token-iterator \param out Output itererator receiving coordinates */ template struct container_inserter { // Version with output iterator template static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, std::string const& wkt, OutputIterator out) { handle_open_parenthesis(it, end, wkt); Point point; // Parse points until closing parenthesis while (it != end && *it != ")") { parsing_assigner < Point, 0, dimension::value >::apply(it, end, point, wkt); out = point; ++out; if (it != end && *it == ",") { ++it; } } handle_close_parenthesis(it, end, wkt); } }; // Geometry is a value-type or reference-type template struct container_appender { typedef typename geometry::point_type < typename boost::remove_reference::type >::type point_type; static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, std::string const& wkt, Geometry out) { handle_open_parenthesis(it, end, wkt); point_type point; // Parse points until closing parenthesis while (it != end && *it != ")") { parsing_assigner < point_type, 0, dimension::value >::apply(it, end, point, wkt); geometry::append(out, point); if (it != end && *it == ",") { ++it; } } handle_close_parenthesis(it, end, wkt); } }; /*! \brief Internal, parses a point from a string like this "(x y)" \note used for parsing points and multi-points */ template struct point_parser { static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, std::string const& wkt, P& point) { handle_open_parenthesis(it, end, wkt); parsing_assigner::value>::apply(it, end, point, wkt); handle_close_parenthesis(it, end, wkt); } }; template struct linestring_parser { static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, std::string const& wkt, Geometry& geometry) { container_appender::apply(it, end, wkt, geometry); } }; template struct ring_parser { static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, std::string const& wkt, Ring& ring) { // A ring should look like polygon((x y,x y,x y...)) // So handle the extra opening/closing parentheses // and in between parse using the container-inserter handle_open_parenthesis(it, end, wkt); container_appender::apply(it, end, wkt, ring); handle_close_parenthesis(it, end, wkt); } }; /*! \brief Internal, parses a polygon from a string like this "((x y,x y),(x y,x y))" \note used for parsing polygons and multi-polygons */ template struct polygon_parser { typedef typename ring_return_type::type ring_return_type; typedef container_appender appender; static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, std::string const& wkt, Polygon& poly) { handle_open_parenthesis(it, end, wkt); int n = -1; // Stop at ")" while (it != end && *it != ")") { // Parse ring if (++n == 0) { appender::apply(it, end, wkt, exterior_ring(poly)); } else { typename ring_type::type ring; appender::apply(it, end, wkt, ring); traits::push_back < typename boost::remove_reference < typename traits::interior_mutable_type::type >::type >::apply(interior_rings(poly), ring); } if (it != end && *it == ",") { // Skip "," after ring is parsed ++it; } } handle_close_parenthesis(it, end, wkt); } }; inline bool one_of(tokenizer::iterator const& it, std::string const& value, bool& is_present) { if (boost::iequals(*it, value)) { is_present = true; return true; } return false; } inline bool one_of(tokenizer::iterator const& it, std::string const& value, bool& present1, bool& present2) { if (boost::iequals(*it, value)) { present1 = true; present2 = true; return true; } return false; } inline void handle_empty_z_m(tokenizer::iterator& it, tokenizer::iterator end, bool& has_empty, bool& has_z, bool& has_m) { has_empty = false; has_z = false; has_m = false; // WKT can optionally have Z and M (measured) values as in // POINT ZM (1 1 5 60), POINT M (1 1 80), POINT Z (1 1 5) // GGL supports any of them as coordinate values, but is not aware // of any Measured value. while (it != end && (one_of(it, "M", has_m) || one_of(it, "Z", has_z) || one_of(it, "EMPTY", has_empty) || one_of(it, "MZ", has_m, has_z) || one_of(it, "ZM", has_z, has_m) ) ) { ++it; } } /*! \brief Internal, starts parsing \param tokens boost tokens, parsed with separator " " and keeping separator "()" \param geometry string to compare with first token */ template inline bool initialize(tokenizer const& tokens, std::string const& geometry_name, std::string const& wkt, tokenizer::iterator& it) { it = tokens.begin(); if (it != tokens.end() && boost::iequals(*it++, geometry_name)) { bool has_empty, has_z, has_m; handle_empty_z_m(it, tokens.end(), has_empty, has_z, has_m); if (has_z && dimension::type::value < 3) { throw read_wkt_exception("Z only allowed for 3 or more dimensions", wkt); } if (has_empty) { check_end(it, tokens.end(), wkt); return false; } // M is ignored at all. return true; } throw read_wkt_exception(std::string("Should start with '") + geometry_name + "'", wkt); } template class Parser, typename PrefixPolicy> struct geometry_parser { static inline void apply(std::string const& wkt, Geometry& geometry) { geometry::clear(geometry); tokenizer tokens(wkt, boost::char_separator(" ", ",()")); tokenizer::iterator it; if (initialize(tokens, PrefixPolicy::apply(), wkt, it)) { Parser::apply(it, tokens.end(), wkt, geometry); check_end(it, tokens.end(), wkt); } } }; /*! \brief Supports box parsing \note OGC does not define the box geometry, and WKT does not support boxes. However, to be generic GGL supports reading and writing from and to boxes. Boxes are outputted as a standard POLYGON. GGL can read boxes from a standard POLYGON, from a POLYGON with 2 points of from a BOX \tparam Box the box */ template struct box_parser { static inline void apply(std::string const& wkt, Box& box) { bool should_close = false; tokenizer tokens(wkt, boost::char_separator(" ", ",()")); tokenizer::iterator it = tokens.begin(); tokenizer::iterator end = tokens.end(); if (it != end && boost::iequals(*it, "POLYGON")) { ++it; bool has_empty, has_z, has_m; handle_empty_z_m(it, end, has_empty, has_z, has_m); if (has_empty) { assign_zero(box); return; } handle_open_parenthesis(it, end, wkt); should_close = true; } else if (it != end && boost::iequals(*it, "BOX")) { ++it; } else { throw read_wkt_exception("Should start with 'POLYGON' or 'BOX'", wkt); } typedef typename point_type::type point_type; std::vector points; container_inserter::apply(it, end, wkt, std::back_inserter(points)); if (should_close) { handle_close_parenthesis(it, end, wkt); } check_end(it, end, wkt); int index = 0; int n = boost::size(points); if (n == 2) { index = 1; } else if (n == 4 || n == 5) { // In case of 4 or 5 points, we do not check the other ones, just // take the opposite corner which is always 2 index = 2; } else { throw read_wkt_exception("Box should have 2,4 or 5 points", wkt); } geometry::detail::assign_point_to_index(points.front(), box); geometry::detail::assign_point_to_index(points[index], box); } }; /*! \brief Supports segment parsing \note OGC does not define the segment, and WKT does not support segmentes. However, it is useful to implement it, also for testing purposes \tparam Segment the segment */ template struct segment_parser { static inline void apply(std::string const& wkt, Segment& segment) { tokenizer tokens(wkt, boost::char_separator(" ", ",()")); tokenizer::iterator it = tokens.begin(); tokenizer::iterator end = tokens.end(); if (it != end && (boost::iequals(*it, "SEGMENT") || boost::iequals(*it, "LINESTRING") )) { ++it; } else { throw read_wkt_exception("Should start with 'LINESTRING' or 'SEGMENT'", wkt); } typedef typename point_type::type point_type; std::vector points; container_inserter::apply(it, end, wkt, std::back_inserter(points)); check_end(it, end, wkt); if (boost::size(points) == 2) { geometry::detail::assign_point_to_index<0>(points.front(), segment); geometry::detail::assign_point_to_index<1>(points.back(), segment); } else { throw read_wkt_exception("Segment should have 2 points", wkt); } } }; }} // namespace detail::wkt #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct read_wkt {}; template struct read_wkt : detail::wkt::geometry_parser < Point, detail::wkt::point_parser, detail::wkt::prefix_point > {}; template struct read_wkt : detail::wkt::geometry_parser < L, detail::wkt::linestring_parser, detail::wkt::prefix_linestring > {}; template struct read_wkt : detail::wkt::geometry_parser < Ring, detail::wkt::ring_parser, detail::wkt::prefix_polygon > {}; template struct read_wkt : detail::wkt::geometry_parser < Geometry, detail::wkt::polygon_parser, detail::wkt::prefix_polygon > {}; // Box (Non-OGC) template struct read_wkt : detail::wkt::box_parser {}; // Segment (Non-OGC) template struct read_wkt : detail::wkt::segment_parser {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Parses OGC Well-Known Text (\ref WKT) into a geometry (any geometry) \ingroup wkt \param wkt string containing \ref WKT \param geometry output geometry \par Example: \note It is case insensitive and can have the WKT forms "point", "point m", "point z", "point zm", "point mz" \note Empty sequences can have forms as "LINESTRING ()" or "POLYGON(())" Small example showing how to use read_wkt to build a point \dontinclude doxygen_1.cpp \skip example_from_wkt_point \line { \until } \par Example: Small example showing how to use read_wkt to build a linestring \dontinclude doxygen_1.cpp \skip example_from_wkt_linestring \line { \until } \par Example: Small example showing how to use read_wkt to build a polygon \dontinclude doxygen_1.cpp \skip example_from_wkt_polygon \line { \until } */ template inline void read_wkt(std::string const& wkt, Geometry& geometry) { geometry::concept::check(); dispatch::read_wkt::type, Geometry>::apply(wkt, geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_IO_WKT_READ_HPP stream.hpp000444000765000024 255512161110644 23345 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io/wkt// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_IO_WKT_STREAM_HPP #define BOOST_GEOMETRY_IO_WKT_STREAM_HPP #include // This short file contains only one manipulator, streaming as WKT // Don't include this in any standard-included header file. // Don't use namespace boost::geometry, to enable the library to stream custom // geometries which are living outside the namespace boost::geometry /*! \brief Streams a geometry as Well-Known Text \ingroup wkt */ template inline std::basic_ostream& operator<< ( std::basic_ostream &os, Geometry const& geom ) { os << boost::geometry::wkt(geom); return os; } #endif // BOOST_GEOMETRY_IO_WKT_STREAM_HPP wkt.hpp000444000765000024 177612161110623 22660 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io/wkt// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_IO_WKT_WKT_HPP #define BOOST_GEOMETRY_IO_WKT_WKT_HPP #include #include // BSG 2011-02-03 // We don't include stream.hpp by default. That tries to stream anything not known // by default (such as ttmath) and reports errors. // Users can include stream.hpp themselves (if they want to) #endif // BOOST_GEOMETRY_IO_WKT_WKT_HPP write.hpp000444000765000024 2314412161110615 23217 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io/wkt// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_IO_WKT_WRITE_HPP #define BOOST_GEOMETRY_IO_WKT_WRITE_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace wkt { template struct stream_coordinate { template static inline void apply(std::basic_ostream& os, P const& p) { os << (I > 0 ? " " : "") << get(p); stream_coordinate::apply(os, p); } }; template struct stream_coordinate { template static inline void apply(std::basic_ostream&, P const&) {} }; struct prefix_linestring_par { static inline const char* apply() { return "LINESTRING("; } }; struct prefix_ring_par_par { // Note, double parentheses are intentional, indicating WKT ring begin/end static inline const char* apply() { return "POLYGON(("; } }; struct opening_parenthesis { static inline const char* apply() { return "("; } }; struct closing_parenthesis { static inline const char* apply() { return ")"; } }; struct double_closing_parenthesis { static inline const char* apply() { return "))"; } }; /*! \brief Stream points as \ref WKT */ template struct wkt_point { template static inline void apply(std::basic_ostream& os, Point const& p) { os << Policy::apply() << "("; stream_coordinate::type::value>::apply(os, p); os << ")"; } }; /*! \brief Stream ranges as WKT \note policy is used to stream prefix/postfix, enabling derived classes to override this */ template struct wkt_range { template static inline void apply(std::basic_ostream& os, Range const& range) { typedef typename boost::range_iterator::type iterator_type; bool first = true; os << PrefixPolicy::apply(); // TODO: check EMPTY here for (iterator_type it = boost::begin(range); it != boost::end(range); ++it) { os << (first ? "" : ","); stream_coordinate < point_type, 0, dimension::type::value >::apply(os, *it); first = false; } os << SuffixPolicy::apply(); } private: typedef typename boost::range_value::type point_type; }; /*! \brief Stream sequence of points as WKT-part, e.g. (1 2),(3 4) \note Used in polygon, all multi-geometries */ template struct wkt_sequence : wkt_range < Range, opening_parenthesis, closing_parenthesis > {}; template struct wkt_poly { template static inline void apply(std::basic_ostream& os, Polygon const& poly) { typedef typename ring_type::type ring; os << PrefixPolicy::apply(); // TODO: check EMPTY here os << "("; wkt_sequence::apply(os, exterior_ring(poly)); typename interior_return_type::type rings = interior_rings(poly); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { os << ","; wkt_sequence::apply(os, *it); } os << ")"; } }; template struct wkt_box { typedef typename point_type::type point_type; template static inline void apply(std::basic_ostream& os, Box const& box) { // Convert to ring, then stream typedef model::ring ring_type; ring_type ring; geometry::convert(box, ring); os << "POLYGON("; wkt_sequence::apply(os, ring); os << ")"; } private: inline wkt_box() { // Only streaming of boxes with two dimensions is support, otherwise it is a polyhedron! //assert_dimension(); } }; template struct wkt_segment { typedef typename point_type::type point_type; template static inline void apply(std::basic_ostream& os, Segment const& segment) { // Convert to two points, then stream typedef boost::array sequence; sequence points; geometry::detail::assign_point_from_index<0>(segment, points[0]); geometry::detail::assign_point_from_index<1>(segment, points[1]); // In Boost.Geometry a segment is represented // in WKT-format like (for 2D): LINESTRING(x y,x y) os << "LINESTRING"; wkt_sequence::apply(os, points); } private: inline wkt_segment() {} }; }} // namespace detail::wkt #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct wkt { BOOST_MPL_ASSERT_MSG ( false, NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct wkt : detail::wkt::wkt_point < Point, detail::wkt::prefix_point > {}; template struct wkt : detail::wkt::wkt_range < Linestring, detail::wkt::prefix_linestring_par, detail::wkt::closing_parenthesis > {}; /*! \brief Specialization to stream a box as WKT \details A "box" does not exist in WKT. It is therefore streamed as a polygon */ template struct wkt : detail::wkt::wkt_box {}; template struct wkt : detail::wkt::wkt_segment {}; /*! \brief Specialization to stream a ring as WKT \details A ring or "linear_ring" does not exist in WKT. A ring is equivalent to a polygon without inner rings It is therefore streamed as a polygon */ template struct wkt : detail::wkt::wkt_range < Ring, detail::wkt::prefix_ring_par_par, detail::wkt::double_closing_parenthesis > {}; /*! \brief Specialization to stream polygon as WKT */ template struct wkt : detail::wkt::wkt_poly < Polygon, detail::wkt::prefix_polygon > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Generic geometry template manipulator class, takes corresponding output class from traits class \ingroup wkt \details Stream manipulator, streams geometry classes as \ref WKT streams \par Example: Small example showing how to use the wkt class \dontinclude doxygen_1.cpp \skip example_as_wkt_point \line { \until } */ template class wkt_manipulator { public: inline wkt_manipulator(Geometry const& g) : m_geometry(g) {} template inline friend std::basic_ostream& operator<<( std::basic_ostream& os, wkt_manipulator const& m) { dispatch::wkt < typename tag::type, Geometry >::apply(os, m.m_geometry); os.flush(); return os; } private: Geometry const& m_geometry; }; /*! \brief Main WKT-streaming function \ingroup wkt \par Example: Small example showing how to use the wkt helper function \dontinclude doxygen_1.cpp \skip example_as_wkt_vector \line { \until } */ template inline wkt_manipulator wkt(Geometry const& geometry) { concept::check(); return wkt_manipulator(geometry); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_IO_WKT_WRITE_HPP detail000755000765000024 012161110663 22440 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io/wktprefix.hpp000444000765000024 227012161110663 24604 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io/wkt/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP #define BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace wkt { struct prefix_point { static inline const char* apply() { return "POINT"; } }; struct prefix_polygon { static inline const char* apply() { return "POLYGON"; } }; struct prefix_linestring { static inline const char* apply() { return "LINESTRING"; } }; }} // namespace wkt::impl #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP wkt_multi.hpp000444000765000024 270712161110656 25335 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/io/wkt/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP #define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace wkt { struct prefix_null { static inline const char* apply() { return ""; } }; struct prefix_multipoint { static inline const char* apply() { return "MULTIPOINT"; } }; struct prefix_multilinestring { static inline const char* apply() { return "MULTILINESTRING"; } }; struct prefix_multipolygon { static inline const char* apply() { return "MULTIPOLYGON"; } }; }} // namespace wkt::impl #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP iterators000755000765000024 012161110702 21770 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometrybase.hpp000444000765000024 401412161110604 23550 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/iterators// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ITERATORS_BASE_HPP #define BOOST_GEOMETRY_ITERATORS_BASE_HPP #include #include #include #include #ifndef DOXYGEN_NO_DETAIL namespace boost { namespace geometry { namespace detail { namespace iterators { template < typename DerivedClass, typename Iterator, typename TraversalFlag = boost::bidirectional_traversal_tag > struct iterator_base : public boost::iterator_adaptor < DerivedClass, Iterator, boost::use_default, typename boost::mpl::if_ < boost::is_convertible < typename boost::iterator_traversal::type, boost::random_access_traversal_tag >, TraversalFlag, boost::use_default >::type > { // Define operator cast to Iterator to be able to write things like Iterator it = myit++ inline operator Iterator() const { return this->base(); } /*inline bool operator==(Iterator const& other) const { return this->base() == other; } inline bool operator!=(Iterator const& other) const { return ! operator==(other); }*/ }; }}}} // namespace boost::geometry::detail::iterators #endif #endif // BOOST_GEOMETRY_ITERATORS_BASE_HPP closing_iterator.hpp000444000765000024 1027212161110610 26225 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/iterators// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ITERATORS_CLOSING_ITERATOR_HPP #define BOOST_GEOMETRY_ITERATORS_CLOSING_ITERATOR_HPP #include #include #include #include namespace boost { namespace geometry { /*! \brief Iterator which iterates through a range, but adds first element at end of the range \tparam Range range on which this class is based on \ingroup iterators \note Use with "closing_iterator or "closing_iterator to get non-const / const behaviour \note This class is normally used from "closeable_view" if Close==true */ template struct closing_iterator : public boost::iterator_facade < closing_iterator, typename boost::range_value::type const, boost::random_access_traversal_tag > { /// Constructor including the range it is based on explicit inline closing_iterator(Range& range) : m_range(&range) , m_iterator(boost::begin(range)) , m_end(boost::end(range)) , m_size(boost::size(range)) , m_index(0) {} /// Constructor to indicate the end of a range explicit inline closing_iterator(Range& range, bool) : m_range(&range) , m_iterator(boost::end(range)) , m_end(boost::end(range)) , m_size(boost::size(range)) , m_index(m_size + 1) {} /// Default constructor explicit inline closing_iterator() : m_range(NULL) , m_size(0) , m_index(0) {} inline closing_iterator& operator=(closing_iterator const& source) { m_range = source.m_range; m_iterator = source.m_iterator; m_end = source.m_end; m_size = source.m_size; m_index = source.m_index; return *this; } typedef std::ptrdiff_t difference_type; private: friend class boost::iterator_core_access; inline typename boost::range_value::type const& dereference() const { return *m_iterator; } inline difference_type distance_to(closing_iterator const& other) const { return other.m_index - this->m_index; } inline bool equal(closing_iterator const& other) const { return this->m_range == other.m_range && this->m_index == other.m_index; } inline void increment() { if (++m_index < m_size) { ++m_iterator; } else { update_iterator(); } } inline void decrement() { if (m_index-- < m_size) { --m_iterator; } else { update_iterator(); } } inline void advance(difference_type n) { if (m_index < m_size && m_index + n < m_size) { m_index += n; m_iterator += n; } else { m_index += n; update_iterator(); } } inline void update_iterator() { this->m_iterator = m_index <= m_size ? boost::begin(*m_range) + (m_index % m_size) : boost::end(*m_range) ; } Range* m_range; typename boost::range_iterator::type m_iterator; typename boost::range_iterator::type m_end; difference_type m_size; difference_type m_index; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ITERATORS_CLOSING_ITERATOR_HPP ever_circling_iterator.hpp000444000765000024 1315412161110702 27406 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/iterators// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_ITERATORS_EVER_CIRCLING_ITERATOR_HPP #define BOOST_GEOMETRY_ITERATORS_EVER_CIRCLING_ITERATOR_HPP #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Iterator which ever circles through a range \tparam Iterator iterator on which this class is based on \ingroup iterators \details If the iterator arrives at range.end() it restarts from the beginning. So it has to be stopped in another way. Don't call for(....; it++) because it will turn in an endless loop \note Name inspired on David Bowie's "Chant Of The Ever Circling Skeletal Family" */ template struct ever_circling_iterator : public detail::iterators::iterator_base < ever_circling_iterator, Iterator > { friend class boost::iterator_core_access; explicit inline ever_circling_iterator(Iterator begin, Iterator end, bool skip_first = false) : m_begin(begin) , m_end(end) , m_skip_first(skip_first) { this->base_reference() = begin; } explicit inline ever_circling_iterator(Iterator begin, Iterator end, Iterator start, bool skip_first = false) : m_begin(begin) , m_end(end) , m_skip_first(skip_first) { this->base_reference() = start; } /// Navigate to a certain position, should be in [start .. end], if at end /// it will circle again. inline void moveto(Iterator it) { this->base_reference() = it; check_end(); } private: inline void increment(bool possibly_skip = true) { (this->base_reference())++; check_end(possibly_skip); } inline void check_end(bool possibly_skip = true) { if (this->base() == this->m_end) { this->base_reference() = this->m_begin; if (m_skip_first && possibly_skip) { increment(false); } } } Iterator m_begin; Iterator m_end; bool m_skip_first; }; template struct ever_circling_range_iterator : public boost::iterator_facade < ever_circling_range_iterator, typename boost::range_value::type const, boost::random_access_traversal_tag > { /// Constructor including the range it is based on explicit inline ever_circling_range_iterator(Range& range) : m_range(&range) , m_iterator(boost::begin(range)) , m_size(boost::size(range)) , m_index(0) {} /// Default constructor explicit inline ever_circling_range_iterator() : m_range(NULL) , m_size(0) , m_index(0) {} inline ever_circling_range_iterator& operator=(ever_circling_range_iterator const& source) { m_range = source.m_range; m_iterator = source.m_iterator; m_size = source.m_size; m_index = source.m_index; return *this; } typedef std::ptrdiff_t difference_type; private: friend class boost::iterator_core_access; inline typename boost::range_value::type const& dereference() const { return *m_iterator; } inline difference_type distance_to(ever_circling_range_iterator const& other) const { return other.m_index - this->m_index; } inline bool equal(ever_circling_range_iterator const& other) const { return this->m_range == other.m_range && this->m_index == other.m_index; } inline void increment() { ++m_index; if (m_index >= 0 && m_index < m_size) { ++m_iterator; } else { update_iterator(); } } inline void decrement() { --m_index; if (m_index >= 0 && m_index < m_size) { --m_iterator; } else { update_iterator(); } } inline void advance(difference_type n) { if (m_index >= 0 && m_index < m_size && m_index + n >= 0 && m_index + n < m_size) { m_index += n; m_iterator += n; } else { m_index += n; update_iterator(); } } inline void update_iterator() { while (m_index < 0) { m_index += m_size; } m_index = m_index % m_size; this->m_iterator = boost::begin(*m_range) + m_index; } Range* m_range; typename boost::range_iterator::type m_iterator; difference_type m_size; difference_type m_index; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ITERATORS_EVER_CIRCLING_ITERATOR_HPP multi000755000765000024 012161110666 21117 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometrymulti.hpp000444000765000024 745312161110666 23130 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_HPP #define BOOST_GEOMETRY_MULTI_HPP #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 #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 #include #endif // BOOST_GEOMETRY_MULTI_HPP algorithms000755000765000024 012161110702 23257 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multiappend.hpp000444000765000024 260412161110644 25403 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { namespace splitted_dispatch { template struct append_point : detail::append::append_point {}; template struct append_range : detail::append::append_range {}; } } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP area.hpp000444000765000024 322212161110702 25034 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_AREA_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_AREA_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct area : detail::multi_sum { template static inline typename Strategy::return_type apply(MultiGeometry const& multi, Strategy const& strategy) { return multi_sum::apply < typename Strategy::return_type, area::type> >(multi, strategy); } }; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_AREA_HPP centroid.hpp000444000765000024 666112161110646 25754 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_CENTROID_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_CENTROID_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace centroid { /*! \brief Building block of a multi-point, to be used as Policy in the more generec centroid_multi */ struct centroid_multi_point_state { template static inline void apply(Point const& point, Strategy const& strategy, typename Strategy::state_type& state) { strategy.apply(point, state); } }; /*! \brief Generic implementation which calls a policy to calculate the centroid of the total of its single-geometries \details The Policy is, in general, the single-version, with state. So detail::centroid::centroid_polygon_state is used as a policy for this detail::centroid::centroid_multi */ template struct centroid_multi { template static inline void apply(Multi const& multi, Point& centroid, Strategy const& strategy) { #if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW) // If there is nothing in any of the ranges, it is not possible // to calculate the centroid if (geometry::num_points(multi) == 0) { throw centroid_exception(); } #endif typename Strategy::state_type state; for (typename boost::range_iterator::type it = boost::begin(multi); it != boost::end(multi); ++it) { Policy::apply(*it, strategy, state); } Strategy::result(state, centroid); } }; }} // namespace detail::centroid #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct centroid : detail::centroid::centroid_multi < detail::centroid::centroid_range_state > {}; template struct centroid : detail::centroid::centroid_multi < detail::centroid::centroid_polygon_state > {}; template struct centroid : detail::centroid::centroid_multi < detail::centroid::centroid_multi_point_state > {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CENTROID_HPP clear.hpp000444000765000024 217312161110616 25222 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_CLEAR_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_CLEAR_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct clear : detail::clear::collection_clear {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CLEAR_HPP convert.hpp000444000765000024 755412161110611 25617 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace conversion { template struct single_to_multi: private Policy { static inline void apply(Single const& single, Multi& multi) { traits::resize::apply(multi, 1); Policy::apply(single, *boost::begin(multi)); } }; template struct multi_to_multi: private Policy { static inline void apply(Multi1 const& multi1, Multi2& multi2) { traits::resize::apply(multi2, boost::size(multi1)); typename boost::range_iterator::type it1 = boost::begin(multi1); typename boost::range_iterator::type it2 = boost::begin(multi2); for (; it1 != boost::end(multi1); ++it1, ++it2) { Policy::apply(*it1, *it2); } } }; }} // namespace detail::convert #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { // Dispatch for multi <-> multi, specifying their single-version as policy. // Note that, even if the multi-types are mutually different, their single // version types might be the same and therefore we call boost::is_same again template struct convert : detail::conversion::multi_to_multi < Multi1, Multi2, convert < typename boost::range_value::type, typename boost::range_value::type, typename single_tag_of < typename tag::type >::type, typename single_tag_of < typename tag::type >::type, DimensionCount > > {}; template struct convert : detail::conversion::single_to_multi < Single, Multi, convert < Single, typename boost::range_value::type, typename tag::type, typename single_tag_of < typename tag::type >::type, DimensionCount, false > > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP correct.hpp000444000765000024 333512161110654 25600 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_CORRECT_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_CORRECT_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct correct : detail::correct::correct_nop {}; template struct correct : detail::correct::correct_nop {}; template struct correct : detail::multi_modify < Geometry, detail::correct::correct_polygon < typename boost::range_value::type > > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CORRECT_HPP covered_by.hpp000444000765000024 435512161110624 26260 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct covered_by { template static inline bool apply(Point const& point, MultiPolygon const& multi_polygon, Strategy const& strategy) { return detail::within::geometry_multi_within_code < Point, MultiPolygon, Strategy, detail::within::point_in_polygon < Point, typename boost::range_value::type, order_as_direction < geometry::point_order::value >::value, geometry::closure::value, Strategy > >::apply(point, multi_polygon, strategy) >= 0; } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP disjoint.hpp000444000765000024 212012161110677 25756 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2012 Bruno Lalande, Paris, France. // Copyright (c) 2012 Mateusz Loskot, London, UK. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct disjoint : detail::disjoint::reverse_covered_by {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP distance.hpp000444000765000024 1032512161110610 25736 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace distance { template struct distance_single_to_multi : private dispatch::distance < Geometry, typename range_value::type, Strategy > { typedef typename strategy::distance::services::return_type::type return_type; static inline return_type apply(Geometry const& geometry, MultiGeometry const& multi, Strategy const& strategy) { return_type mindist = return_type(); bool first = true; for(typename range_iterator::type it = boost::begin(multi); it != boost::end(multi); ++it, first = false) { return_type dist = dispatch::distance < Geometry, typename range_value::type, Strategy >::apply(geometry, *it, strategy); if (first || dist < mindist) { mindist = dist; } } return mindist; } }; template struct distance_multi_to_multi : private distance_single_to_multi < typename range_value::type, Multi2, Strategy > { typedef typename strategy::distance::services::return_type::type return_type; static inline return_type apply(Multi1 const& multi1, Multi2 const& multi2, Strategy const& strategy) { return_type mindist = return_type(); bool first = true; for(typename range_iterator::type it = boost::begin(multi1); it != boost::end(multi1); ++it, first = false) { return_type dist = distance_single_to_multi < typename range_value::type, Multi2, Strategy >::apply(*it, multi2, strategy); if (first || dist < mindist) { mindist = dist; } } return mindist; } }; }} // namespace detail::distance #endif #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename G1, typename G2, typename Strategy, typename SingleGeometryTag > struct distance < G1, G2, Strategy, SingleGeometryTag, multi_tag, strategy_tag_distance_point_point, false > : detail::distance::distance_single_to_multi {}; template struct distance < G1, G2, Strategy, multi_tag, multi_tag, strategy_tag_distance_point_point, false > : detail::distance::distance_multi_to_multi {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP envelope.hpp000444000765000024 505212161110602 25743 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace envelope { struct envelope_multi_linestring { template static inline void apply(MultiLinestring const& mp, Box& mbr) { assign_inverse(mbr); for (typename boost::range_iterator::type it = mp.begin(); it != mp.end(); ++it) { envelope_range_additional(*it, mbr); } } }; // version for multi_polygon: outer ring's of all polygons struct envelope_multi_polygon { template static inline void apply(MultiPolygon const& mp, Box& mbr) { assign_inverse(mbr); for (typename boost::range_const_iterator::type it = mp.begin(); it != mp.end(); ++it) { envelope_range_additional(exterior_ring(*it), mbr); } } }; }} // namespace detail::envelope #endif #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct envelope : detail::envelope::envelope_range {}; template struct envelope : detail::envelope::envelope_multi_linestring {}; template struct envelope : detail::envelope::envelope_multi_polygon {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP equals.hpp000444000765000024 322512161110657 25432 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_EQUALS_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_EQUALS_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct equals < MultiPolygon1, MultiPolygon2, multi_polygon_tag, multi_polygon_tag, 2, Reverse > : detail::equals::equals_by_collection {}; template struct equals < Polygon, MultiPolygon, polygon_tag, multi_polygon_tag, 2, Reverse > : detail::equals::equals_by_collection {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_EQUALS_HPP for_each.hpp000444000765000024 541212161110614 25677 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_FOR_EACH_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_FOR_EACH_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace for_each { // Implementation of multi, for both point and segment, // just calling the single version. template struct for_each_multi { template static inline void apply(MultiGeometry& multi, Functor& f) { for(BOOST_AUTO_TPL(it, boost::begin(multi)); it != boost::end(multi); ++it) { Policy::apply(*it, f); } } }; }} // namespace detail::for_each #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct for_each_point : detail::for_each::for_each_multi < // Specify the dispatch of the single-version as policy for_each_point < typename add_const_if_c < is_const::value, typename boost::range_value::type >::type > > {}; template struct for_each_segment : detail::for_each::for_each_multi < // Specify the dispatch of the single-version as policy for_each_segment < typename add_const_if_c < is_const::value, typename boost::range_value::type >::type > > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_FOR_EACH_HPP intersection.hpp000444000765000024 2655212161110621 26665 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_INTERSECTION_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_INTERSECTION_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace intersection { template struct intersection_multi_linestring_multi_linestring_point { template < typename MultiLinestring1, typename MultiLinestring2, typename OutputIterator, typename Strategy > static inline OutputIterator apply(MultiLinestring1 const& ml1, MultiLinestring2 const& ml2, OutputIterator out, Strategy const& strategy) { // Note, this loop is quadratic w.r.t. number of linestrings per input. // Future Enhancement: first do the sections of each, then intersect. for (typename boost::range_iterator < MultiLinestring1 const >::type it1 = boost::begin(ml1); it1 != boost::end(ml1); ++it1) { for (typename boost::range_iterator < MultiLinestring2 const >::type it2 = boost::begin(ml2); it2 != boost::end(ml2); ++it2) { out = intersection_linestring_linestring_point ::apply(*it1, *it2, out, strategy); } } return out; } }; template struct intersection_linestring_multi_linestring_point { template < typename Linestring, typename MultiLinestring, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Linestring const& linestring, MultiLinestring const& ml, OutputIterator out, Strategy const& strategy) { for (typename boost::range_iterator < MultiLinestring const >::type it = boost::begin(ml); it != boost::end(ml); ++it) { out = intersection_linestring_linestring_point ::apply(linestring, *it, out, strategy); } return out; } }; // This loop is quite similar to the loop above, but beacuse the iterator // is second (above) or first (below) argument, it is not trivial to merge them. template < bool ReverseAreal, typename LineStringOut, overlay_type OverlayType > struct intersection_of_multi_linestring_with_areal { template < typename MultiLinestring, typename Areal, typename OutputIterator, typename Strategy > static inline OutputIterator apply(MultiLinestring const& ml, Areal const& areal, OutputIterator out, Strategy const& strategy) { for (typename boost::range_iterator < MultiLinestring const >::type it = boost::begin(ml); it != boost::end(ml); ++it) { out = intersection_of_linestring_with_areal < ReverseAreal, LineStringOut, OverlayType >::apply(*it, areal, out, strategy); } return out; } }; // This one calls the one above with reversed arguments template < bool ReverseAreal, typename LineStringOut, overlay_type OverlayType > struct intersection_of_areal_with_multi_linestring { template < typename Areal, typename MultiLinestring, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Areal const& areal, MultiLinestring const& ml, OutputIterator out, Strategy const& strategy) { return intersection_of_multi_linestring_with_areal < ReverseAreal, LineStringOut, OverlayType >::apply(ml, areal, out, strategy); } }; template struct clip_multi_linestring { template < typename MultiLinestring, typename Box, typename OutputIterator, typename Strategy > static inline OutputIterator apply(MultiLinestring const& multi_linestring, Box const& box, OutputIterator out, Strategy const& ) { typedef typename point_type::type point_type; strategy::intersection::liang_barsky lb_strategy; for (typename boost::range_iterator::type it = boost::begin(multi_linestring); it != boost::end(multi_linestring); ++it) { out = detail::intersection::clip_range_with_box (box, *it, out, lb_strategy); } return out; } }; }} // namespace detail::intersection #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { // Linear template < typename MultiLinestring1, typename MultiLinestring2, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut > struct intersection_insert < MultiLinestring1, MultiLinestring2, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, multi_linestring_tag, multi_linestring_tag, point_tag, false, false, false > : detail::intersection::intersection_multi_linestring_multi_linestring_point < GeometryOut > {}; template < typename Linestring, typename MultiLinestring, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut > struct intersection_insert < Linestring, MultiLinestring, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, linestring_tag, multi_linestring_tag, point_tag, false, false, false > : detail::intersection::intersection_linestring_multi_linestring_point < GeometryOut > {}; template < typename MultiLinestring, typename Box, typename GeometryOut, overlay_type OverlayType, bool Reverse1, bool Reverse2, bool ReverseOut > struct intersection_insert < MultiLinestring, Box, GeometryOut, OverlayType, Reverse1, Reverse2, ReverseOut, multi_linestring_tag, box_tag, linestring_tag, false, true, false > : detail::intersection::clip_multi_linestring < GeometryOut > {}; template < typename Linestring, typename MultiPolygon, typename GeometryOut, overlay_type OverlayType, bool ReverseLinestring, bool ReverseMultiPolygon, bool ReverseOut > struct intersection_insert < Linestring, MultiPolygon, GeometryOut, OverlayType, ReverseLinestring, ReverseMultiPolygon, ReverseOut, linestring_tag, multi_polygon_tag, linestring_tag, false, true, false > : detail::intersection::intersection_of_linestring_with_areal < ReverseMultiPolygon, GeometryOut, OverlayType > {}; // Derives from areal/mls because runtime arguments are in that order. // areal/mls reverses it itself to mls/areal template < typename Polygon, typename MultiLinestring, typename GeometryOut, overlay_type OverlayType, bool ReversePolygon, bool ReverseMultiLinestring, bool ReverseOut > struct intersection_insert < Polygon, MultiLinestring, GeometryOut, OverlayType, ReversePolygon, ReverseMultiLinestring, ReverseOut, polygon_tag, multi_linestring_tag, linestring_tag, true, false, false > : detail::intersection::intersection_of_areal_with_multi_linestring < ReversePolygon, GeometryOut, OverlayType > {}; template < typename MultiLinestring, typename Ring, typename GeometryOut, overlay_type OverlayType, bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut > struct intersection_insert < MultiLinestring, Ring, GeometryOut, OverlayType, ReverseMultiLinestring, ReverseRing, ReverseOut, multi_linestring_tag, ring_tag, linestring_tag, false, true, false > : detail::intersection::intersection_of_multi_linestring_with_areal < ReverseRing, GeometryOut, OverlayType > {}; template < typename MultiLinestring, typename Polygon, typename GeometryOut, overlay_type OverlayType, bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut > struct intersection_insert < MultiLinestring, Polygon, GeometryOut, OverlayType, ReverseMultiLinestring, ReverseRing, ReverseOut, multi_linestring_tag, polygon_tag, linestring_tag, false, true, false > : detail::intersection::intersection_of_multi_linestring_with_areal < ReverseRing, GeometryOut, OverlayType > {}; template < typename MultiLinestring, typename MultiPolygon, typename GeometryOut, overlay_type OverlayType, bool ReverseMultiLinestring, bool ReverseMultiPolygon, bool ReverseOut > struct intersection_insert < MultiLinestring, MultiPolygon, GeometryOut, OverlayType, ReverseMultiLinestring, ReverseMultiPolygon, ReverseOut, multi_linestring_tag, multi_polygon_tag, linestring_tag, false, true, false > : detail::intersection::intersection_of_multi_linestring_with_areal < ReverseMultiPolygon, GeometryOut, OverlayType > {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_INTERSECTION_HPP length.hpp000444000765000024 355612161110667 25431 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_LENGTH_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_LENGTH_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct length : detail::multi_sum { template static inline typename default_length_result::type apply(MultiLinestring const& multi, Strategy const& strategy) { return multi_sum::apply < typename default_length_result::type, detail::length::range_length < typename boost::range_value::type, closed // no need to close it explicitly > >(multi, strategy); } }; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_LENGTH_HPP num_geometries.hpp000444000765000024 241712161110616 27157 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_GEOMETRIES_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_GEOMETRIES_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct num_geometries { static inline std::size_t apply(MultiGeometry const& multi_geometry) { return boost::size(multi_geometry); } }; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_GEOMETRIES_HPP num_interior_rings.hpp000444000765000024 325112161110611 30041 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_INTERIOR_RINGS_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_INTERIOR_RINGS_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct num_interior_rings { static inline std::size_t apply(MultiPolygon const& multi_polygon) { std::size_t n = 0; for (typename boost::range_iterator::type it = boost::begin(multi_polygon); it != boost::end(multi_polygon); ++it) { n += geometry::num_interior_rings(*it); } return n; } }; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_INTERIOR_RINGS_HPP num_points.hpp000444000765000024 366012161110651 26330 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_POINTS_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_POINTS_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace num_points { struct multi_count { template static inline size_t apply(MultiGeometry const& geometry, bool add_for_open) { typedef typename boost::range_value::type geometry_type; typedef typename boost::range_iterator < MultiGeometry const >::type iterator_type; std::size_t n = 0; for (iterator_type it = boost::begin(geometry); it != boost::end(geometry); ++it) { n += dispatch::num_points::apply(*it, add_for_open); } return n; } }; }} // namespace detail::num_points #endif #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct num_points : detail::num_points::multi_count {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_POINTS_HPP perimeter.hpp000444000765000024 331412161110667 26134 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_PERIMETER_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_PERIMETER_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct perimeter : detail::multi_sum { template static inline typename default_length_result::type apply(MultiPolygon const& multi, Strategy const& strategy) { return multi_sum::apply < typename default_length_result::type, perimeter::type> >(multi, strategy); } }; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_PERIMETER_HPP reverse.hpp000444000765000024 304612161110620 25602 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_REVERSE_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_REVERSE_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct reverse : detail::multi_modify < Geometry, detail::reverse::range_reverse > {}; template struct reverse : detail::multi_modify < Geometry, detail::reverse::polygon_reverse > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_REVERSE_HPP simplify.hpp000444000765000024 477512161110700 25774 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace simplify { template struct simplify_multi { template static inline void apply(MultiGeometry const& multi, MultiGeometry& out, double max_distance, Strategy const& strategy) { traits::resize::apply(out, boost::size(multi)); typename boost::range_iterator::type it_out = boost::begin(out); for (typename boost::range_iterator::type it_in = boost::begin(multi); it_in != boost::end(multi); ++it_in, ++it_out) { Policy::apply(*it_in, *it_out, max_distance, strategy); } } }; }} // namespace detail::simplify #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct simplify : detail::simplify::simplify_copy {}; template struct simplify : detail::simplify::simplify_multi > {}; template struct simplify : detail::simplify::simplify_multi {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP transform.hpp000444000765000024 467112161110600 26145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace transform { /*! \brief Is able to transform any multi-geometry, calling the single-version as policy */ template struct transform_multi { template static inline bool apply(Multi1 const& multi1, Multi2& multi2, S const& strategy) { traits::resize::apply(multi2, boost::size(multi1)); typename boost::range_iterator::type it1 = boost::begin(multi1); typename boost::range_iterator::type it2 = boost::begin(multi2); for (; it1 != boost::end(multi1); ++it1, ++it2) { if (! Policy::apply(*it1, *it2, strategy)) { return false; } } return true; } }; }} // namespace detail::transform #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct transform < Multi1, Multi2, multi_tag, multi_tag > : detail::transform::transform_multi < transform < typename boost::range_value::type, typename boost::range_value::type > > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP unique.hpp000444000765000024 435212161110700 25435 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_UNIQUE_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_UNIQUE_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace unique { template struct multi_unique { template static inline void apply(MultiGeometry& multi, ComparePolicy const& compare) { for (typename boost::range_iterator::type it = boost::begin(multi); it != boost::end(multi); ++it) { Policy::apply(*it, compare); } } }; }} // namespace detail::unique #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { // For points, unique is not applicable and does nothing // (Note that it is not "spatially unique" but that it removes duplicate coordinates, // like std::unique does). Spatially unique is "dissolve" which can (or will be) // possible for multi-points as well, removing points at the same location. template struct unique : detail::unique::multi_unique {}; template struct unique : detail::unique::multi_unique {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_UNIQUE_HPP within.hpp000444000765000024 615212161110664 25442 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace within { template < typename Geometry, typename MultiGeometry, typename Strategy, typename Policy > struct geometry_multi_within_code { static inline int apply(Geometry const& geometry, MultiGeometry const& multi, Strategy const& strategy) { for (typename boost::range_iterator::type it = boost::begin(multi); it != boost::end(multi); ++it) { // Geometry coding on multi: 1 (within) if within one of them; // 0 (touch) if on border of one of them int const code = Policy::apply(geometry, *it, strategy); if (code != -1) { return code; } } return -1; } }; }} // namespace detail::within #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct within { template static inline bool apply(Point const& point, MultiPolygon const& multi_polygon, Strategy const& strategy) { return detail::within::geometry_multi_within_code < Point, MultiPolygon, Strategy, detail::within::point_in_polygon < Point, typename boost::range_value::type, order_as_direction < geometry::point_order::value >::value, geometry::closure::value, Strategy > >::apply(point, multi_polygon, strategy) == 1; } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP detail000755000765000024 012161110673 24530 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithmsfor_each_range.hpp000444000765000024 446712161110621 30324 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace for_each { template struct fe_range_multi { static inline void apply( typename add_const_if_c::type& multi, Actor& actor) { for(BOOST_AUTO_TPL(it, boost::begin(multi)); it != boost::end(multi); ++it) { geometry::detail::for_each_range(*it, actor); } } }; }} // namespace detail::for_each #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct for_each_range : detail::for_each::fe_range_range {}; template struct for_each_range : detail::for_each::fe_range_multi {}; template struct for_each_range : detail::for_each::fe_range_multi {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP modify.hpp000444000765000024 254112161110612 26660 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_HPP #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct multi_modify { static inline void apply(MultiGeometry& multi) { typedef typename boost::range_iterator::type iterator_type; for (iterator_type it = boost::begin(multi); it != boost::end(multi); ++it) { Policy::apply(*it); } } }; } // namespace detail #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_HPP modify_with_predicate.hpp000444000765000024 272612161110673 31747 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct multi_modify_with_predicate { static inline void apply(MultiGeometry& multi, Predicate const& predicate) { typedef typename boost::range_iterator::type iterator_type; for (iterator_type it = boost::begin(multi); it != boost::end(multi); ++it) { Policy::apply(*it, predicate); } } }; } // namespace detail #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP multi_sum.hpp000444000765000024 272012161110641 27410 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_SUM_HPP #define BOOST_GEOMETRY_MULTI_SUM_HPP #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { struct multi_sum { template static inline ReturnType apply(MultiGeometry const& geometry, Strategy const& strategy) { ReturnType sum = ReturnType(); for (typename boost::range_iterator < MultiGeometry const >::type it = boost::begin(geometry); it != boost::end(geometry); ++it) { sum += Policy::apply(*it, strategy); } return sum; } }; } // namespace detail #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_SUM_HPP point_on_border.hpp000444000765000024 453712161110600 30557 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace point_on_border { template < typename Point, typename MultiGeometry, typename Policy > struct point_on_multi { static inline bool apply(Point& point, MultiGeometry const& multi, bool midpoint) { // Take a point on the first multi-geometry // (i.e. the first that is not empty) for (typename boost::range_iterator < MultiGeometry const >::type it = boost::begin(multi); it != boost::end(multi); ++it) { if (Policy::apply(point, *it, midpoint)) { return true; } } return false; } }; }} // namespace detail::point_on_border #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct point_on_border : detail::point_on_border::point_on_multi < Point, Multi, detail::point_on_border::point_on_polygon < Point, typename boost::range_value::type > > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP overlay000755000765000024 012161110700 26200 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detailcopy_segment_point.hpp000444000765000024 454512161110700 32763 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace copy_segments { template < typename MultiGeometry, typename SegmentIdentifier, typename PointOut, typename Policy > struct copy_segment_point_multi { static inline bool apply(MultiGeometry const& multi, SegmentIdentifier const& seg_id, bool second, PointOut& point) { BOOST_ASSERT ( seg_id.multi_index >= 0 && seg_id.multi_index < int(boost::size(multi)) ); // Call the single-version return Policy::apply(multi[seg_id.multi_index], seg_id, second, point); } }; }} // namespace detail::copy_segments #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename MultiGeometry, bool Reverse, typename SegmentIdentifier, typename PointOut > struct copy_segment_point < multi_polygon_tag, MultiGeometry, Reverse, SegmentIdentifier, PointOut > : detail::copy_segments::copy_segment_point_multi < MultiGeometry, SegmentIdentifier, PointOut, detail::copy_segments::copy_segment_point_polygon < typename boost::range_value::type, Reverse, SegmentIdentifier, PointOut > > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP copy_segments.hpp000444000765000024 470012161110661 31734 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace copy_segments { template < typename MultiGeometry, typename SegmentIdentifier, typename RangeOut, typename Policy > struct copy_segments_multi { static inline void apply(MultiGeometry const& multi_geometry, SegmentIdentifier const& seg_id, int to_index, RangeOut& current_output) { BOOST_ASSERT ( seg_id.multi_index >= 0 && seg_id.multi_index < int(boost::size(multi_geometry)) ); // Call the single-version Policy::apply(multi_geometry[seg_id.multi_index], seg_id, to_index, current_output); } }; }} // namespace detail::copy_segments #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename MultiPolygon, bool Reverse, typename SegmentIdentifier, typename RangeOut > struct copy_segments < multi_polygon_tag, MultiPolygon, Reverse, SegmentIdentifier, RangeOut > : detail::copy_segments::copy_segments_multi < MultiPolygon, SegmentIdentifier, RangeOut, detail::copy_segments::copy_segments_polygon < typename boost::range_value::type, Reverse, SegmentIdentifier, RangeOut > > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP get_ring.hpp000444000765000024 270212161110621 30647 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template<> struct get_ring { template static inline typename ring_type::type const& apply( ring_identifier const& id, MultiPolygon const& multi_polygon) { BOOST_ASSERT ( id.multi_index >= 0 && id.multi_index < int(boost::size(multi_polygon)) ); return get_ring::apply(id, multi_polygon[id.multi_index]); } }; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP get_turns.hpp000444000765000024 561712161110646 31102 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace get_turns { template < typename Multi, typename Box, bool Reverse, bool ReverseBox, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns_multi_polygon_cs { static inline void apply( int source_id1, Multi const& multi, int source_id2, Box const& box, Turns& turns, InterruptPolicy& interrupt_policy) { typedef typename boost::range_iterator < Multi const >::type iterator_type; int i = 0; for (iterator_type it = boost::begin(multi); it != boost::end(multi); ++it, ++i) { // Call its single version get_turns_polygon_cs < typename boost::range_value::type, Box, Reverse, ReverseBox, Turns, TurnPolicy, InterruptPolicy >::apply(source_id1, *it, source_id2, box, turns, interrupt_policy, i); } } }; }} // namespace detail::get_turns #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename MultiPolygon, typename Box, bool ReverseMultiPolygon, bool ReverseBox, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct get_turns < multi_polygon_tag, box_tag, MultiPolygon, Box, ReverseMultiPolygon, ReverseBox, Turns, TurnPolicy, InterruptPolicy > : detail::get_turns::get_turns_multi_polygon_cs < MultiPolygon, Box, ReverseMultiPolygon, ReverseBox, Turns, TurnPolicy, InterruptPolicy > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP select_rings.hpp000444000765000024 334412161110637 31544 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { namespace dispatch { template struct select_rings { template static inline void apply(Multi const& multi, Geometry const& geometry, ring_identifier id, Map& map, bool midpoint) { typedef typename boost::range_iterator < Multi const >::type iterator_type; typedef select_rings::type> per_polygon; id.multi_index = 0; for (iterator_type it = boost::begin(multi); it != boost::end(multi); ++it) { id.ring_index = -1; per_polygon::apply(*it, geometry, id, map, midpoint); id.multi_index++; } } }; } }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP self_turn_points.hpp000444000765000024 245112161110653 32454 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail/overlay// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename MultiPolygon, typename Turns, typename TurnPolicy, typename InterruptPolicy > struct self_get_turn_points < multi_polygon_tag, MultiPolygon, Turns, TurnPolicy, InterruptPolicy > : detail::self_get_turn_points::get_turns < MultiPolygon, Turns, TurnPolicy, InterruptPolicy > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP sections000755000765000024 012161110663 26356 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detailrange_by_section.hpp000444000765000024 444312161110663 32543 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail/sections// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace section { template < typename MultiGeometry, typename Section, typename Policy > struct full_section_multi { static inline typename ring_return_type::type apply( MultiGeometry const& multi, Section const& section) { BOOST_ASSERT ( section.ring_id.multi_index >= 0 && section.ring_id.multi_index < int(boost::size(multi)) ); return Policy::apply(multi[section.ring_id.multi_index], section); } }; }} // namespace detail::section #endif #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct range_by_section : detail::section::full_section_multi < MultiPolygon, Section, detail::section::full_section_polygon < typename boost::range_value::type, Section > > {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP sectionalize.hpp000444000765000024 503112161110601 31704 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/algorithms/detail/sections// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP #define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace sectionalize { template struct sectionalize_multi { static inline void apply(MultiGeometry const& multi, Sections& sections, ring_identifier ring_id) { ring_id.multi_index = 0; for (typename boost::range_iterator::type it = boost::begin(multi); it != boost::end(multi); ++it, ++ring_id.multi_index) { Policy::apply(*it, sections, ring_id); } } }; }} // namespace detail::sectionalize #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < typename MultiPolygon, bool Reverse, typename Sections, std::size_t DimensionCount, std::size_t MaxCount > struct sectionalize : detail::sectionalize::sectionalize_multi < MultiPolygon, Sections, DimensionCount, detail::sectionalize::sectionalize_polygon < typename boost::range_value::type, Reverse, Sections, DimensionCount, MaxCount > > {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP core000755000765000024 012161110674 22046 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multiclosure.hpp000444000765000024 327612161110674 24400 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP #define BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct closure : public core_detail::closure::closed {}; template struct closure : public core_detail::closure::closed {}; // Specialization for polygon: the closure is the closure of its rings template struct closure { static const closure_selector value = core_dispatch::closure < polygon_tag, typename boost::range_value::type >::value ; }; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP geometry_id.hpp000444000765000024 264012161110617 25222 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP #define BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template <> struct geometry_id : boost::mpl::int_<4> {}; template <> struct geometry_id : boost::mpl::int_<5> {}; template <> struct geometry_id : boost::mpl::int_<6> {}; } // namespace core_dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP interior_rings.hpp000444000765000024 254012161110627 25750 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_CORE_INTERIOR_RINGS_HPP #define BOOST_GEOMETRY_MULTI_CORE_INTERIOR_RINGS_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct interior_type { typedef typename core_dispatch::interior_type < polygon_tag, typename boost::range_value::type >::type type; }; } // namespace core_dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_CORE_INTERIOR_RINGS_HPP is_areal.hpp000444000765000024 215712161110647 24500 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_CORE_IS_AREAL_HPP #define BOOST_GEOMETRY_MULTI_CORE_IS_AREAL_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template <> struct is_areal : boost::true_type {}; } // namespace core_dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_CORE_IS_AREAL_HPP point_order.hpp000444000765000024 323512161110645 25241 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_CORE_POINT_ORDER_HPP #define BOOST_GEOMETRY_MULTI_CORE_POINT_ORDER_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct point_order : public detail::point_order::clockwise {}; template struct point_order : public detail::point_order::clockwise {}; // Specialization for multi_polygon: the order is the order of its polygons template struct point_order { static const order_selector value = core_dispatch::point_order < polygon_tag, typename boost::range_value::type >::value ; }; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_CORE_POINT_ORDER_HPP point_type.hpp000444000765000024 316012161110610 25074 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_CORE_POINT_TYPE_HPP #define BOOST_GEOMETRY_MULTI_CORE_POINT_TYPE_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct point_type { typedef typename boost::range_value::type type; }; template struct point_type { typedef typename point_type::type>::type type; }; template struct point_type { typedef typename point_type::type>::type type; }; } #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_CORE_POINT_TYPE_HPP ring_type.hpp000444000765000024 341012161110622 24703 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_CORE_RING_TYPE_HPP #define BOOST_GEOMETRY_MULTI_CORE_RING_TYPE_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template struct ring_return_type { typedef typename ring_return_type < polygon_tag, typename mpl::if_ < boost::is_const, typename boost::range_value::type const, typename boost::range_value::type >::type >::type type; }; template struct ring_type { typedef typename boost::remove_reference < typename ring_return_type::type >::type type; }; } // namespace core_dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_CORE_RING_TYPE_HPP tags.hpp000444000765000024 332012161110616 23644 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP #define BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP #include namespace boost { namespace geometry { /// OGC Multi point identifying tag struct multi_point_tag : multi_tag, pointlike_tag {}; /// OGC Multi linestring identifying tag struct multi_linestring_tag : multi_tag, linear_tag {}; /// OGC Multi polygon identifying tag struct multi_polygon_tag : multi_tag, polygonal_tag {}; /// OGC Geometry Collection identifying tag struct geometry_collection_tag : multi_tag {}; /*! \brief Meta-function to get for a tag of a multi-geometry the tag of the corresponding single-geometry */ template struct single_tag_of {}; #ifndef DOXYGEN_NO_DETAIL template <> struct single_tag_of { typedef point_tag type; }; template <> struct single_tag_of { typedef linestring_tag type; }; template <> struct single_tag_of { typedef polygon_tag type; }; #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP topological_dimension.hpp000444000765000024 237612161110665 27305 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/core// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_TOPOLOGICAL_DIMENSION_HPP #define BOOST_GEOMETRY_MULTI_TOPOLOGICAL_DIMENSION_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch { template <> struct top_dim : boost::mpl::int_<0> {}; template <> struct top_dim : boost::mpl::int_<1> {}; template <> struct top_dim : boost::mpl::int_<2> {}; } // namespace core_dispatch #endif }} // namespace boost::geometry #endif geometries000755000765000024 012161110702 23251 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multimulti_geometries.hpp000444000765000024 171412161110702 27477 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP #include #include #include #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP multi_linestring.hpp000444000765000024 413412161110650 27513 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief multi_line, a collection of linestring \details Multi-linestring can be used to group lines belonging to each other, e.g. a highway (with interruptions) \ingroup geometries \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_multi_linestring MultiLineString Concept] } */ template < typename LineString, template class Container = std::vector, template class Allocator = std::allocator > class multi_linestring : public Container > { BOOST_CONCEPT_ASSERT( (concept::Linestring) ); }; } // namespace model #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template < typename LineString, template class Container, template class Allocator > struct tag< model::multi_linestring > { typedef multi_linestring_tag type; }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP multi_point.hpp000444000765000024 475412161110637 26503 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief multi_point, a collection of points \ingroup geometries \tparam Point \tparam_point \tparam Container \tparam_container \tparam Allocator \tparam_allocator \details Multipoint can be used to group points belonging to each other, e.g. a constellation, or the result set of an intersection \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_multi_point MultiPoint Concept] } */ template < typename Point, template class Container = std::vector, template class Allocator = std::allocator > class multi_point : public Container > { BOOST_CONCEPT_ASSERT( (concept::Point) ); typedef Container > base_type; public : /// \constructor_default{multi_point} inline multi_point() : base_type() {} /// \constructor_begin_end{multi_point} template inline multi_point(Iterator begin, Iterator end) : base_type(begin, end) {} }; } // namespace model #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template < typename Point, template class Container, template class Allocator > struct tag< model::multi_point > { typedef multi_point_tag type; }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP multi_polygon.hpp000444000765000024 404312161110607 27025 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace model { /*! \brief multi_polygon, a collection of polygons \details Multi-polygon can be used to group polygons belonging to each other, e.g. Hawaii \ingroup geometries \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_multi_polygon MultiPolygon Concept] } */ template < typename Polygon, template class Container = std::vector, template class Allocator = std::allocator > class multi_polygon : public Container > { BOOST_CONCEPT_ASSERT( (concept::Polygon) ); }; } // namespace model #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template < typename Polygon, template class Container, template class Allocator > struct tag< model::multi_polygon > { typedef multi_polygon_tag type; }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP concepts000755000765000024 012161110657 25100 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometriescheck.hpp000444000765000024 442312161110625 27021 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; template struct check : detail::concept_check::check > {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP multi_linestring_concept.hpp000444000765000024 447512161110653 33057 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief multi-linestring concept \ingroup concepts \par Formal definition: The multi linestring concept is defined as following: - there must be a specialization of traits::tag defining multi_linestring_tag as type - it must behave like a Boost.Range - its range value must fulfil the Linestring concept */ template class MultiLinestring { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename boost::range_value::type linestring_type; BOOST_CONCEPT_ASSERT( (concept::Linestring) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(MultiLinestring) { } #endif }; /*! \brief concept for multi-linestring (const version) \ingroup const_concepts */ template class ConstMultiLinestring { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename boost::range_value::type linestring_type; BOOST_CONCEPT_ASSERT( (concept::ConstLinestring) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(ConstMultiLinestring) { } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP multi_point_concept.hpp000444000765000024 433212161110657 32026 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief MultiPoint concept \ingroup concepts \par Formal definition: The multi point concept is defined as following: - there must be a specialization of traits::tag defining multi_point_tag as type - it must behave like a Boost.Range - its range value must fulfil the Point concept */ template class MultiPoint { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename boost::range_value::type point_type; BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(MultiPoint) { } #endif }; /*! \brief concept for multi-point (const version) \ingroup const_concepts */ template class ConstMultiPoint { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename boost::range_value::type point_type; BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(ConstMultiPoint) { } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP multi_polygon_concept.hpp000444000765000024 440412161110651 32356 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief multi-polygon concept \ingroup concepts \par Formal definition: The multi polygon concept is defined as following: - there must be a specialization of traits::tag defining multi_polygon_tag as type - it must behave like a Boost.Range - its range value must fulfil the Polygon concept */ template class MultiPolygon { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename boost::range_value::type polygon_type; BOOST_CONCEPT_ASSERT( (concept::Polygon) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(MultiPolygon) { } #endif }; /*! \brief concept for multi-polygon (const version) \ingroup const_concepts */ template class ConstMultiPolygon { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS typedef typename boost::range_value::type polygon_type; BOOST_CONCEPT_ASSERT( (concept::ConstPolygon) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); public : BOOST_CONCEPT_USAGE(ConstMultiPolygon) { } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP register000755000765000024 012161110675 25106 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometriesmulti_linestring.hpp000444000765000024 430312161110616 31337 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries/register// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP #include #include /*! \brief \brief_macro{multi_linestring} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING, multi_linestring} The multi_linestring may contain template parameters, which must be specified then. \param MultiLineString \param_macro_type{multi_linestring} \qbk{ [heading Example] [register_multi_linestring] [register_multi_linestring_output] } */ #define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING(MultiLineString) \ namespace boost { namespace geometry { namespace traits { \ template<> struct tag { typedef multi_linestring_tag type; }; \ }}} /*! \brief \brief_macro{templated multi_linestring} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED, templated multi_linestring} \details_macro_templated{multi_linestring, linestring} \param MultiLineString \param_macro_type{multi_linestring (without template parameters)} \qbk{ [heading Example] [register_multi_linestring_templated] [register_multi_linestring_templated_output] } */ #define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED(MultiLineString) \ namespace boost { namespace geometry { namespace traits { \ template struct tag< MultiLineString > { typedef multi_linestring_tag type; }; \ }}} #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP multi_point.hpp000444000765000024 405512161110675 30323 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries/register// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP #include #include /*! \brief \brief_macro{multi_point} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT, multi_point} The multi_point may contain template parameters, which must be specified then. \param MultiPoint \param_macro_type{multi_point} \qbk{ [heading Example] [register_multi_point] [register_multi_point_output] } */ #define BOOST_GEOMETRY_REGISTER_MULTI_POINT(MultiPoint) \ namespace boost { namespace geometry { namespace traits { \ template<> struct tag { typedef multi_point_tag type; }; \ }}} /*! \brief \brief_macro{templated multi_point} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED, templated multi_point} \details_macro_templated{multi_point, point} \param MultiPoint \param_macro_type{multi_point (without template parameters)} \qbk{ [heading Example] [register_multi_point_templated] [register_multi_point_templated_output] } */ #define BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(MultiPoint) \ namespace boost { namespace geometry { namespace traits { \ template struct tag< MultiPoint > { typedef multi_point_tag type; }; \ }}} #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP multi_polygon.hpp000444000765000024 415112161110621 30645 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/geometries/register// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP #include #include /*! \brief \brief_macro{multi_polygon} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON, multi_polygon} The multi_polygon may contain template parameters, which must be specified then. \param MultiPolygon \param_macro_type{multi_polygon} \qbk{ [heading Example] [register_multi_polygon] [register_multi_polygon_output] } */ #define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON(MultiPolygon) \ namespace boost { namespace geometry { namespace traits { \ template<> struct tag { typedef multi_polygon_tag type; }; \ }}} /*! \brief \brief_macro{templated multi_polygon} \ingroup register \details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED, templated multi_polygon} \details_macro_templated{multi_polygon, polygon} \param MultiPolygon \param_macro_type{multi_polygon (without template parameters)} \qbk{ [heading Example] [register_multi_polygon_templated] [register_multi_polygon_templated_output] } */ #define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED(MultiPolygon) \ namespace boost { namespace geometry { namespace traits { \ template struct tag< MultiPolygon > { typedef multi_polygon_tag type; }; \ }}} #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP io000755000765000024 012161110674 21525 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multidsv000755000765000024 012161110674 22321 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/iowrite.hpp000444000765000024 441612161110674 24326 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/io/dsv// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP #define BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace dsv { template struct dsv_multi { typedef dispatch::dsv < typename single_tag_of < typename tag::type >::type, typename boost::range_value::type > dispatch_one; typedef typename boost::range_iterator < MultiGeometry const >::type iterator; template static inline void apply(std::basic_ostream& os, MultiGeometry const& multi, dsv_settings const& settings) { os << settings.list_open; bool first = true; for(iterator it = boost::begin(multi); it != boost::end(multi); ++it, first = false) { os << (first ? "" : settings.list_separator); dispatch_one::apply(os, *it, settings); } os << settings.list_close; } }; }} // namespace detail::dsv #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct dsv : detail::dsv::dsv_multi {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP wkt000755000765000024 012161110656 22332 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/ioread.hpp000444000765000024 1252012161110601 24121 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/io/wkt// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP #define BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace detail { namespace wkt { template class Parser, typename PrefixPolicy> struct multi_parser { static inline void apply(std::string const& wkt, MultiGeometry& geometry) { traits::clear::apply(geometry); tokenizer tokens(wkt, boost::char_separator(" ", ",()")); tokenizer::iterator it; if (initialize(tokens, PrefixPolicy::apply(), wkt, it)) { handle_open_parenthesis(it, tokens.end(), wkt); // Parse sub-geometries while(it != tokens.end() && *it != ")") { traits::resize::apply(geometry, boost::size(geometry) + 1); Parser < typename boost::range_value::type >::apply(it, tokens.end(), wkt, geometry.back()); if (it != tokens.end() && *it == ",") { // Skip "," after multi-element is parsed ++it; } } handle_close_parenthesis(it, tokens.end(), wkt); } check_end(it, tokens.end(), wkt); } }; template struct noparenthesis_point_parser { static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, std::string const& wkt, P& point) { parsing_assigner::value>::apply(it, end, point, wkt); } }; template struct multi_point_parser { static inline void apply(std::string const& wkt, MultiGeometry& geometry) { traits::clear::apply(geometry); tokenizer tokens(wkt, boost::char_separator(" ", ",()")); tokenizer::iterator it; if (initialize(tokens, PrefixPolicy::apply(), wkt, it)) { handle_open_parenthesis(it, tokens.end(), wkt); // If first point definition starts with "(" then parse points as (x y) // otherwise as "x y" bool using_brackets = (it != tokens.end() && *it == "("); while(it != tokens.end() && *it != ")") { traits::resize::apply(geometry, boost::size(geometry) + 1); if (using_brackets) { point_parser < typename boost::range_value::type >::apply(it, tokens.end(), wkt, geometry.back()); } else { noparenthesis_point_parser < typename boost::range_value::type >::apply(it, tokens.end(), wkt, geometry.back()); } if (it != tokens.end() && *it == ",") { // Skip "," after point is parsed ++it; } } handle_close_parenthesis(it, tokens.end(), wkt); } check_end(it, tokens.end(), wkt); } }; }} // namespace detail::wkt #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct read_wkt : detail::wkt::multi_point_parser < MultiGeometry, detail::wkt::prefix_multipoint > {}; template struct read_wkt : detail::wkt::multi_parser < MultiGeometry, detail::wkt::linestring_parser, detail::wkt::prefix_multilinestring > {}; template struct read_wkt : detail::wkt::multi_parser < MultiGeometry, detail::wkt::polygon_parser, detail::wkt::prefix_multipolygon > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP wkt.hpp000444000765000024 150112161110647 24002 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/io/wkt// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP #define BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP #include #include #endif // BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP write.hpp000444000765000024 563012161110656 24336 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/io/wkt// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP #define BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace wkt { template struct wkt_multi { template static inline void apply(std::basic_ostream& os, Multi const& geometry) { os << PrefixPolicy::apply(); // TODO: check EMPTY here os << "("; for (typename boost::range_iterator::type it = boost::begin(geometry); it != boost::end(geometry); ++it) { if (it != boost::begin(geometry)) { os << ","; } StreamPolicy::apply(os, *it); } os << ")"; } }; }} // namespace wkt::impl #endif #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct wkt : detail::wkt::wkt_multi < Multi, detail::wkt::wkt_point < typename boost::range_value::type, detail::wkt::prefix_null >, detail::wkt::prefix_multipoint > {}; template struct wkt : detail::wkt::wkt_multi < Multi, detail::wkt::wkt_sequence < typename boost::range_value::type >, detail::wkt::prefix_multilinestring > {}; template struct wkt : detail::wkt::wkt_multi < Multi, detail::wkt::wkt_poly < typename boost::range_value::type, detail::wkt::prefix_null >, detail::wkt::prefix_multipolygon > {}; } // namespace dispatch #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP detail000755000765000024 012161110646 23573 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/io/wktprefix.hpp000444000765000024 255212161110646 25742 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/io/wkt/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP #define BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace wkt { struct prefix_null { static inline const char* apply() { return ""; } }; struct prefix_multipoint { static inline const char* apply() { return "MULTIPOINT"; } }; struct prefix_multilinestring { static inline const char* apply() { return "MULTILINESTRING"; } }; struct prefix_multipolygon { static inline const char* apply() { return "MULTIPOLYGON"; } }; }} // namespace wkt::impl #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP strategies000755000765000024 012161110642 23263 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multicartesian000755000765000024 012161110642 25234 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/strategiescentroid_average.hpp000444000765000024 506012161110642 31404 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP #define BOOST_GEOMETRY_MULTI_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace centroid { /*! \brief Centroid calculation taking average of points \ingroup strategies */ template < typename PointCentroid, typename Point = PointCentroid > class average { private : /*! subclass to keep state */ class sum { friend class average; int count; PointCentroid centroid; public : inline sum() : count(0) { assign_zero(centroid); } }; public : typedef sum state_type; typedef PointCentroid centroid_point_type; typedef Point point_type; static inline void apply(Point const& p, sum& state) { add_point(state.centroid, p); state.count++; } static inline void result(sum const& state, PointCentroid& centroid) { centroid = state.centroid; divide_value(centroid, state.count); } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template struct default_strategy < cartesian_tag, pointlike_tag, DimensionCount, Point, Geometry > { typedef average < Point, typename point_type::type > type; }; } // namespace services #endif }} // namespace strategy::centroid }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP views000755000765000024 012161110611 22242 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multidetail000755000765000024 012161110611 23504 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/viewsrange_type.hpp000444000765000024 313212161110611 26506 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/multi/views/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_MULTI_VIEWS_DETAIL_RANGE_TYPE_HPP #define BOOST_GEOMETRY_MULTI_VIEWS_DETAIL_RANGE_TYPE_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { // multi-point acts itself as a range template struct range_type { typedef Geometry type; }; template struct range_type { typedef typename boost::range_value::type type; }; template struct range_type { // Call its single-version typedef typename geometry::detail::range_type < typename boost::range_value::type >::type type; }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_VIEWS_DETAIL_RANGE_TYPE_HPP policies000755000765000024 012161110700 21561 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometrycompare.hpp000444000765000024 1367312161110700 24107 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/policies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_POLICIES_COMPARE_HPP #define BOOST_GEOMETRY_POLICIES_COMPARE_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace compare { template < int Direction, typename Point, typename Strategy, std::size_t Dimension, std::size_t DimensionCount > struct compare_loop { typedef typename strategy::compare::detail::select_strategy < Strategy, Direction, Point, Dimension >::type compare_type; typedef typename geometry::coordinate_type::type coordinate_type; static inline bool apply(Point const& left, Point const& right) { coordinate_type const& cleft = geometry::get(left); coordinate_type const& cright = geometry::get(right); if (geometry::math::equals(cleft, cright)) { return compare_loop < Direction, Point, Strategy, Dimension + 1, DimensionCount >::apply(left, right); } else { compare_type compare; return compare(cleft, cright); } } }; template < int Direction, typename Point, typename Strategy, std::size_t DimensionCount > struct compare_loop { static inline bool apply(Point const&, Point const&) { // On coming here, points are equal. Return true if // direction = 0 (equal), false if -1/1 (greater/less) return Direction == 0; } }; template struct compare_in_all_dimensions { inline bool operator()(Point const& left, Point const& right) const { return detail::compare::compare_loop < Direction, Point, Strategy, 0, geometry::dimension::type::value >::apply(left, right); } }; template class compare_in_one_dimension { Strategy compare; public : inline bool operator()(Point const& left, Point const& right) const { typedef typename geometry::coordinate_type::type coordinate_type; coordinate_type const& cleft = get(left); coordinate_type const& cright = get(right); return compare(cleft, cright); } }; }} // namespace detail::compare #endif #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template < int Direction, typename Point, typename Strategy, int Dimension > struct compare_geometries : detail::compare::compare_in_one_dimension < Point, typename strategy::compare::detail::select_strategy < Strategy, Direction, Point, Dimension >::type, Dimension > {}; // Specialization with -1: compare in all dimensions template struct compare_geometries : detail::compare::compare_in_all_dimensions {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH /*! \brief Less functor, to sort points in ascending order. \ingroup compare \details This functor compares points and orders them on x, then on y, then on z coordinate. \tparam Geometry the geometry \tparam Dimension the dimension to sort on, defaults to -1, indicating ALL dimensions. That's to say, first on x, on equal x-es then on y, etc. If a dimension is specified, only that dimension is considered \tparam Strategy underlying coordinate comparing functor, defaults to the default comparison strategies related to the point coordinate system. If specified, the specified strategy is used. This can e.g. be std::less. */ template < typename Point, int Dimension = -1, typename Strategy = strategy::compare::default_strategy > struct less : dispatch::compare_geometries < 1, // indicates ascending Point, Strategy, Dimension > { typedef Point first_argument_type; typedef Point second_argument_type; typedef bool result_type; }; /*! \brief Greater functor \ingroup compare \details Can be used to sort points in reverse order \see Less functor */ template < typename Point, int Dimension = -1, typename Strategy = strategy::compare::default_strategy > struct greater : dispatch::compare_geometries < -1, // indicates descending Point, Strategy, Dimension > {}; /*! \brief Equal To functor, to compare if points are equal \ingroup compare \tparam Geometry the geometry \tparam Dimension the dimension to compare on, defaults to -1, indicating ALL dimensions. If a dimension is specified, only that dimension is considered \tparam Strategy underlying coordinate comparing functor */ template < typename Point, int Dimension = -1, typename Strategy = strategy::compare::default_strategy > struct equal_to : dispatch::compare_geometries < 0, Point, Strategy, Dimension > {}; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_POLICIES_COMPARE_HPP relate000755000765000024 012161110677 23052 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/policiesde9im.hpp000444000765000024 1267112161110614 24745 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/policies/relate// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DE9IM_HPP #define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DE9IM_HPP #include #include #include namespace boost { namespace geometry { namespace policies { namespace relate { template struct segments_de9im { typedef de9im_segment return_type; typedef S1 segment_type1; typedef S2 segment_type2; typedef typename select_coordinate_type::type coordinate_type; static inline return_type rays_intersect(bool on_segment, double ra, double rb, coordinate_type const& dx1, coordinate_type const& dy1, coordinate_type const& dx2, coordinate_type const& dy2, coordinate_type const& wx, coordinate_type const& wy, S1 const& s1, S2 const& s2) { if(on_segment) { // 0 <= ra <= 1 and 0 <= rb <= 1 // Now check if one of them is 0 or 1, these are "touch" cases bool a = math::equals(ra, 0.0) || math::equals(ra, 1.0); bool b = math::equals(rb, 0.0) || math::equals(rb, 1.0); if (a && b) { // Touch boundary/boundary: i-i == -1, i-b == -1, b-b == 0 // Opposite: if both are equal they touch in opposite direction return de9im_segment(ra,rb, -1, -1, 1, -1, 0, 0, 1, 0, 2, false, math::equals(ra,rb)); } else if (a || b) { // Touch boundary/interior: i-i == -1, i-b == -1 or 0, b-b == -1 int A = a ? 0 : -1; int B = b ? 0 : -1; return de9im_segment(ra,rb, -1, B, 1, A, -1, 0, 1, 0, 2); } // Intersects: i-i == 0, i-b == -1, i-e == 1 return de9im_segment(ra,rb, 0, -1, 1, -1, -1, 0, 1, 0, 2); } // Not on segment, disjoint return de9im_segment(ra,rb, -1, -1, 1, -1, -1, 0, 1, 0, 2); } static inline return_type collinear_touch(coordinate_type const& x, coordinate_type const& y, bool opposite, char) { return de9im_segment(0,0, -1, -1, 1, -1, 0, 0, 1, 0, 2, true, opposite); } template static inline return_type collinear_interior_boundary_intersect(S const& s, bool a_within_b, bool opposite) { return a_within_b ? de9im_segment(0,0, 1, -1, -1, 0, 0, -1, 1, 0, 2, true, opposite) : de9im_segment(0,0, 1, 0, 1, -1, 0, 0, -1, -1, 2, true, opposite); } static inline return_type collinear_a_in_b(S1 const& s, bool opposite) { return de9im_segment(0,0, 1, -1, -1, 0, -1, -1, 1, 0, 2, true, opposite); } static inline return_type collinear_b_in_a(S2 const& s, bool opposite) { return de9im_segment(0,0, 1, 0, 1, -1, -1, 0, -1, -1, 2, true, opposite); } static inline return_type collinear_overlaps( coordinate_type const& x1, coordinate_type const& y1, coordinate_type const& x2, coordinate_type const& y2, bool opposite) { return de9im_segment(0,0, 1, 0, 1, 0, -1, 0, 1, 0, 2, true, opposite); } static inline return_type segment_equal(S1 const& s, bool opposite) { return de9im_segment(0,0, 1, -1, -1, -1, 0, -1, -1, -1, 2, true, opposite); } static inline return_type degenerate(S1 const& segment, bool a_degenerate) { return a_degenerate ? de9im_segment(0,0, 0, -1, -1, -1, -1, -1, 1, 0, 2, false, false, false, true) : de9im_segment(0,0, 0, -1, 1, -1, -1, 0, -1, -1, 2, false, false, false, true); } static inline return_type collinear_disjoint() { return de9im_segment(0,0, -1, -1, 1, -1, -1, 0, 1, 0, 2, true); } }; }} // namespace policies::relate }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DE9IM_HPP direction.hpp000444000765000024 2706312161110637 25724 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/policies/relate// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP #define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace policies { namespace relate { struct direction_type { // NOTE: "char" will be replaced by enum in future version inline direction_type(side_info const& s, char h, int ha, int hb, int da = 0, int db = 0, bool op = false) : how(h) , opposite(op) , how_a(ha) , how_b(hb) , dir_a(da) , dir_b(db) , sides(s) { arrival[0] = ha; arrival[1] = hb; } inline direction_type(char h, bool op, int ha = 0, int hb = 0) : how(h) , opposite(op) , how_a(ha) , how_b(hb) , dir_a(0) , dir_b(0) { arrival[0] = ha; arrival[1] = hb; } // TODO: replace this // NOTE: "char" will be replaced by enum in future version // "How" is the intersection formed? char how; // Is it opposite (for collinear/equal cases) bool opposite; // Information on how A arrives at intersection, how B arrives at intersection // 1: arrives at intersection // -1: starts from intersection int how_a; int how_b; // Direction: how is A positioned from B // 1: points left, seen from IP // -1: points right, seen from IP // In case of intersection: B's TO direction // In case that B's TO direction is at A: B's from direction // In collinear cases: it is 0 int dir_a; // Direction of A-s TO from IP int dir_b; // Direction of B-s TO from IP // New information side_info sides; int arrival[2]; // 1=arrival, -1departure, 0=neutral; == how_a//how_b // About arrival[0] (== arrival of a2 w.r.t. b) for COLLINEAR cases // Arrival 1: a1--------->a2 (a arrives within b) // b1----->b2 // Arrival 1: (a in b) // // Arrival -1: a1--------->a2 (a does not arrive within b) // b1----->b2 // Arrival -1: (b in a) a_1-------------a_2 // b_1---b_2 // Arrival 0: a1------->a2 (a arrives at TO-border of b) // b1--->b2 }; template struct segments_direction { typedef direction_type return_type; typedef S1 segment_type1; typedef S2 segment_type2; typedef typename select_calculation_type < S1, S2, CalculationType >::type coordinate_type; // Get the same type, but at least a double typedef typename select_most_precise::type rtype; template static inline return_type segments_intersect(side_info const& sides, R const&, coordinate_type const& dx1, coordinate_type const& dy1, coordinate_type const& dx2, coordinate_type const& dy2, S1 const& s1, S2 const& s2) { bool const ra0 = sides.get<0,0>() == 0; bool const ra1 = sides.get<0,1>() == 0; bool const rb0 = sides.get<1,0>() == 0; bool const rb1 = sides.get<1,1>() == 0; return // opposite and same starting point (FROM) ra0 && rb0 ? calculate_side<1>(sides, dx1, dy1, s1, s2, 'f', -1, -1) // opposite and point to each other (TO) : ra1 && rb1 ? calculate_side<0>(sides, dx1, dy1, s1, s2, 't', 1, 1) // not opposite, forming an angle, first a then b, // directed either both left, or both right // Check side of B2 from A. This is not calculated before : ra1 && rb0 ? angle<1>(sides, dx1, dy1, s1, s2, 'a', 1, -1) // not opposite, forming a angle, first b then a, // directed either both left, or both right : ra0 && rb1 ? angle<0>(sides, dx1, dy1, s1, s2, 'a', -1, 1) // b starts from interior of a : rb0 ? starts_from_middle(sides, dx1, dy1, s1, s2, 'B', 0, -1) // a starts from interior of b (#39) : ra0 ? starts_from_middle(sides, dx1, dy1, s1, s2, 'A', -1, 0) // b ends at interior of a, calculate direction of A from IP : rb1 ? b_ends_at_middle(sides, dx2, dy2, s1, s2) // a ends at interior of b : ra1 ? a_ends_at_middle(sides, dx1, dy1, s1, s2) // normal intersection : calculate_side<1>(sides, dx1, dy1, s1, s2, 'i', -1, -1) ; } static inline return_type collinear_touch( coordinate_type const& , coordinate_type const& , int arrival_a, int arrival_b) { // Though this is 'collinear', we handle it as To/From/Angle because it is the same. // It only does NOT have a direction. side_info sides; //int const arrive = how == 'T' ? 1 : -1; bool opposite = arrival_a == arrival_b; return ! opposite ? return_type(sides, 'a', arrival_a, arrival_b) : return_type(sides, arrival_a == 0 ? 't' : 'f', arrival_a, arrival_b, 0, 0, true); } template static inline return_type collinear_interior_boundary_intersect(S const& , bool, int arrival_a, int arrival_b, bool opposite) { return_type r('c', opposite); r.arrival[0] = arrival_a; r.arrival[1] = arrival_b; return r; } static inline return_type collinear_a_in_b(S1 const& , bool opposite) { return_type r('c', opposite); r.arrival[0] = 1; r.arrival[1] = -1; return r; } static inline return_type collinear_b_in_a(S2 const& , bool opposite) { return_type r('c', opposite); r.arrival[0] = -1; r.arrival[1] = 1; return r; } static inline return_type collinear_overlaps( coordinate_type const& , coordinate_type const& , coordinate_type const& , coordinate_type const& , int arrival_a, int arrival_b, bool opposite) { return_type r('c', opposite); r.arrival[0] = arrival_a; r.arrival[1] = arrival_b; return r; } static inline return_type segment_equal(S1 const& , bool opposite) { return return_type('e', opposite); } static inline return_type degenerate(S1 const& , bool) { return return_type('0', false); } static inline return_type disjoint() { return return_type('d', false); } static inline return_type collinear_disjoint() { return return_type('d', false); } static inline return_type error(std::string const&) { // Return "E" to denote error // This will throw an error in get_turn_info // TODO: change to enum or similar return return_type('E', false); } private : static inline bool is_left ( coordinate_type const& ux, coordinate_type const& uy, coordinate_type const& vx, coordinate_type const& vy ) { // This is a "side calculation" as in the strategies, but here terms are precalculated // We might merge this with side, offering a pre-calculated term (in fact already done using cross-product) // Waiting for implementing spherical... rtype const zero = rtype(); return geometry::detail::determinant(ux, uy, vx, vy) > zero; } template static inline return_type calculate_side(side_info const& sides, coordinate_type const& dx1, coordinate_type const& dy1, S1 const& s1, S2 const& s2, char how, int how_a, int how_b) { coordinate_type dpx = get(s2) - get<0, 0>(s1); coordinate_type dpy = get(s2) - get<0, 1>(s1); return is_left(dx1, dy1, dpx, dpy) ? return_type(sides, how, how_a, how_b, -1, 1) : return_type(sides, how, how_a, how_b, 1, -1); } template static inline return_type angle(side_info const& sides, coordinate_type const& dx1, coordinate_type const& dy1, S1 const& s1, S2 const& s2, char how, int how_a, int how_b) { coordinate_type dpx = get(s2) - get<0, 0>(s1); coordinate_type dpy = get(s2) - get<0, 1>(s1); return is_left(dx1, dy1, dpx, dpy) ? return_type(sides, how, how_a, how_b, 1, 1) : return_type(sides, how, how_a, how_b, -1, -1); } static inline return_type starts_from_middle(side_info const& sides, coordinate_type const& dx1, coordinate_type const& dy1, S1 const& s1, S2 const& s2, char which, int how_a, int how_b) { // Calculate ARROW of b segment w.r.t. s1 coordinate_type dpx = get<1, 0>(s2) - get<0, 0>(s1); coordinate_type dpy = get<1, 1>(s2) - get<0, 1>(s1); int dir = is_left(dx1, dy1, dpx, dpy) ? 1 : -1; // From other perspective, then reverse bool const is_a = which == 'A'; if (is_a) { dir = -dir; } return return_type(sides, 's', how_a, how_b, is_a ? dir : -dir, ! is_a ? dir : -dir); } // To be harmonized static inline return_type a_ends_at_middle(side_info const& sides, coordinate_type const& dx, coordinate_type const& dy, S1 const& s1, S2 const& s2) { coordinate_type dpx = get<1, 0>(s2) - get<0, 0>(s1); coordinate_type dpy = get<1, 1>(s2) - get<0, 1>(s1); // Ending at the middle, one ARRIVES, the other one is NEUTRAL // (because it both "arrives" and "departs" there return is_left(dx, dy, dpx, dpy) ? return_type(sides, 'm', 1, 0, 1, 1) : return_type(sides, 'm', 1, 0, -1, -1); } static inline return_type b_ends_at_middle(side_info const& sides, coordinate_type const& dx, coordinate_type const& dy, S1 const& s1, S2 const& s2) { coordinate_type dpx = get<1, 0>(s1) - get<0, 0>(s2); coordinate_type dpy = get<1, 1>(s1) - get<0, 1>(s2); return is_left(dx, dy, dpx, dpy) ? return_type(sides, 'm', 0, 1, 1, 1) : return_type(sides, 'm', 0, 1, -1, -1); } }; }} // namespace policies::relate }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP intersection_points.hpp000444000765000024 1217212161110606 30035 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/policies/relate// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP #define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace policies { namespace relate { template struct segments_intersection_points { typedef ReturnType return_type; typedef S1 segment_type1; typedef S2 segment_type2; typedef typename select_calculation_type < S1, S2, CalculationType >::type coordinate_type; template static inline return_type segments_intersect(side_info const&, R const& r, coordinate_type const& dx1, coordinate_type const& dy1, coordinate_type const& dx2, coordinate_type const& dy2, S1 const& s1, S2 const& s2) { typedef typename geometry::coordinate_type < typename return_type::point_type >::type return_coordinate_type; coordinate_type const s1x = get<0, 0>(s1); coordinate_type const s1y = get<0, 1>(s1); return_type result; result.count = 1; set<0>(result.intersections[0], boost::numeric_cast(R(s1x) + r * R(dx1))); set<1>(result.intersections[0], boost::numeric_cast(R(s1y) + r * R(dy1))); return result; } static inline return_type collinear_touch(coordinate_type const& x, coordinate_type const& y, int, int) { return_type result; result.count = 1; set<0>(result.intersections[0], x); set<1>(result.intersections[0], y); return result; } template static inline return_type collinear_inside(S const& s, int index1 = 0, int index2 = 1) { return_type result; result.count = 2; set<0>(result.intersections[index1], get<0, 0>(s)); set<1>(result.intersections[index1], get<0, 1>(s)); set<0>(result.intersections[index2], get<1, 0>(s)); set<1>(result.intersections[index2], get<1, 1>(s)); return result; } template static inline return_type collinear_interior_boundary_intersect(S const& s, bool a_in_b, int, int, bool opposite) { int index1 = opposite && ! a_in_b ? 1 : 0; return collinear_inside(s, index1, 1 - index1); } static inline return_type collinear_a_in_b(S1 const& s, bool) { return collinear_inside(s); } static inline return_type collinear_b_in_a(S2 const& s, bool opposite) { int index1 = opposite ? 1 : 0; return collinear_inside(s, index1, 1 - index1); } static inline return_type collinear_overlaps( coordinate_type const& x1, coordinate_type const& y1, coordinate_type const& x2, coordinate_type const& y2, int, int, bool) { return_type result; result.count = 2; set<0>(result.intersections[0], x1); set<1>(result.intersections[0], y1); set<0>(result.intersections[1], x2); set<1>(result.intersections[1], y2); return result; } static inline return_type segment_equal(S1 const& s, bool) { return_type result; result.count = 2; // TODO: order of IP's set<0>(result.intersections[0], get<0, 0>(s)); set<1>(result.intersections[0], get<0, 1>(s)); set<0>(result.intersections[1], get<1, 0>(s)); set<1>(result.intersections[1], get<1, 1>(s)); return result; } static inline return_type disjoint() { return return_type(); } static inline return_type error(std::string const&) { return return_type(); } static inline return_type collinear_disjoint() { return return_type(); } static inline return_type degenerate(S1 const& s, bool) { return_type result; result.count = 1; set<0>(result.intersections[0], get<0, 0>(s)); set<1>(result.intersections[0], get<0, 1>(s)); return result; } }; }} // namespace policies::relate }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP tupled.hpp000444000765000024 1314712161110677 25243 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/policies/relate// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_TUPLED_HPP #define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_TUPLED_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace policies { namespace relate { // "tupled" to return intersection results together. // Now with two, with some meta-programming and derivations it can also be three (or more) template struct segments_tupled { typedef boost::tuple < typename Policy1::return_type, typename Policy2::return_type > return_type; // Take segments of first policy, they should be equal typedef typename Policy1::segment_type1 segment_type1; typedef typename Policy1::segment_type2 segment_type2; typedef typename select_calculation_type < segment_type1, segment_type2, CalculationType >::type coordinate_type; // Get the same type, but at least a double typedef typename select_most_precise::type rtype; template static inline return_type segments_intersect(side_info const& sides, R const& r, coordinate_type const& dx1, coordinate_type const& dy1, coordinate_type const& dx2, coordinate_type const& dy2, segment_type1 const& s1, segment_type2 const& s2) { return boost::make_tuple ( Policy1::segments_intersect(sides, r, dx1, dy1, dx2, dy2, s1, s2), Policy2::segments_intersect(sides, r, dx1, dy1, dx2, dy2, s1, s2) ); } static inline return_type collinear_touch(coordinate_type const& x, coordinate_type const& y, int arrival_a, int arrival_b) { return boost::make_tuple ( Policy1::collinear_touch(x, y, arrival_a, arrival_b), Policy2::collinear_touch(x, y, arrival_a, arrival_b) ); } template static inline return_type collinear_interior_boundary_intersect(S const& segment, bool a_within_b, int arrival_a, int arrival_b, bool opposite) { return boost::make_tuple ( Policy1::collinear_interior_boundary_intersect(segment, a_within_b, arrival_a, arrival_b, opposite), Policy2::collinear_interior_boundary_intersect(segment, a_within_b, arrival_a, arrival_b, opposite) ); } static inline return_type collinear_a_in_b(segment_type1 const& segment, bool opposite) { return boost::make_tuple ( Policy1::collinear_a_in_b(segment, opposite), Policy2::collinear_a_in_b(segment, opposite) ); } static inline return_type collinear_b_in_a(segment_type2 const& segment, bool opposite) { return boost::make_tuple ( Policy1::collinear_b_in_a(segment, opposite), Policy2::collinear_b_in_a(segment, opposite) ); } static inline return_type collinear_overlaps( coordinate_type const& x1, coordinate_type const& y1, coordinate_type const& x2, coordinate_type const& y2, int arrival_a, int arrival_b, bool opposite) { return boost::make_tuple ( Policy1::collinear_overlaps(x1, y1, x2, y2, arrival_a, arrival_b, opposite), Policy2::collinear_overlaps(x1, y1, x2, y2, arrival_a, arrival_b, opposite) ); } static inline return_type segment_equal(segment_type1 const& s, bool opposite) { return boost::make_tuple ( Policy1::segment_equal(s, opposite), Policy2::segment_equal(s, opposite) ); } static inline return_type degenerate(segment_type1 const& segment, bool a_degenerate) { return boost::make_tuple ( Policy1::degenerate(segment, a_degenerate), Policy2::degenerate(segment, a_degenerate) ); } static inline return_type disjoint() { return boost::make_tuple ( Policy1::disjoint(), Policy2::disjoint() ); } static inline return_type error(std::string const& msg) { return boost::make_tuple ( Policy1::error(msg), Policy2::error(msg) ); } static inline return_type collinear_disjoint() { return boost::make_tuple ( Policy1::collinear_disjoint(), Policy2::collinear_disjoint() ); } }; }} // namespace policies::relate }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_TUPLED_HPP strategies000755000765000024 012161110674 22136 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometryarea.hpp000444000765000024 261612161110642 23714 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_AREA_HPP #define BOOST_GEOMETRY_STRATEGIES_AREA_HPP #include #include namespace boost { namespace geometry { namespace strategy { namespace area { namespace services { /*! \brief Traits class binding a default area strategy to a coordinate system \ingroup area \tparam Tag tag of coordinate system \tparam PointOfSegment point-type */ template struct default_strategy { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE , (types) ); }; }}} // namespace strategy::area::services }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_AREA_HPP centroid.hpp000444000765000024 330412161110655 24612 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CENTROID_HPP #define BOOST_GEOMETRY_STRATEGIES_CENTROID_HPP #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace centroid { struct not_applicable_strategy { }; namespace services { /*! \brief Traits class binding a centroid calculation strategy to a coordinate system \ingroup centroid \tparam CsTag tag of coordinate system, for specialization \tparam GeometryTag tag of geometry, for specialization \tparam Dimension dimension of geometry, for specialization \tparam Point point-type \tparam Geometry */ template < typename CsTag, typename GeometryTag, std::size_t Dimension, typename Point, typename Geometry > struct default_strategy { typedef not_applicable_strategy type; }; } // namespace services }} // namespace strategy::centroid }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CENTROID_HPP compare.hpp000444000765000024 1020212161110656 24445 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_COMPARE_HPP #define BOOST_GEOMETRY_STRATEGIES_COMPARE_HPP #include #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Traits class binding a comparing strategy to a coordinate system \ingroup util \tparam Tag tag of coordinate system of point-type \tparam Direction direction to compare on: 1 for less (-> ascending order) and -1 for greater (-> descending order) \tparam Point point-type \tparam CoordinateSystem coordinate sytem of point \tparam Dimension: the dimension to compare on */ template < typename Tag, int Direction, typename Point, typename CoordinateSystem, std::size_t Dimension > struct strategy_compare { typedef strategy::not_implemented type; }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS // For compare we add defaults specializations, // because they defaultly redirect to std::less / greater / equal_to template < typename Tag, typename Point, typename CoordinateSystem, std::size_t Dimension > struct strategy_compare { typedef std::less::type> type; }; template < typename Tag, typename Point, typename CoordinateSystem, std::size_t Dimension > struct strategy_compare { typedef std::greater::type> type; }; template < typename Tag, typename Point, typename CoordinateSystem, std::size_t Dimension > struct strategy_compare { typedef std::equal_to::type> type; }; #endif namespace strategy { namespace compare { /*! \brief Default strategy, indicates the default strategy for comparisons \details The default strategy for comparisons defer in most cases to std::less (for ascending) and std::greater (for descending). However, if a spherical coordinate system is used, and comparison is done on longitude, it will take another strategy handling circular */ struct default_strategy {}; #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct is_default : boost::false_type {}; template <> struct is_default : boost::true_type {}; /*! \brief Meta-function to select strategy \details If "default_strategy" is specified, it will take the traits-registered class for the specified coordinate system. If another strategy is explicitly specified, it takes that one. */ template < typename Strategy, int Direction, typename Point, std::size_t Dimension > struct select_strategy { typedef typename boost::mpl::if_ < is_default, typename strategy_compare < typename cs_tag::type, Direction, Point, typename coordinate_system::type, Dimension >::type, Strategy >::type type; }; } // namespace detail #endif // DOXYGEN_NO_DETAIL }} // namespace strategy::compare }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_COMPARE_HPP convex_hull.hpp000444000765000024 255412161110661 25334 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CONVEX_HULL_HPP #define BOOST_GEOMETRY_STRATEGIES_CONVEX_HULL_HPP #include namespace boost { namespace geometry { /*! \brief Traits class binding a convex hull calculation strategy to a coordinate system \ingroup convex_hull \tparam Tag tag of coordinate system \tparam Geometry the geometry type (hull operates internally per hull over geometry) \tparam Point point-type of output points */ template < typename Geometry1, typename Point, typename CsTag = typename cs_tag::type > struct strategy_convex_hull { typedef strategy::not_implemented type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CONVEX_HULL_HPP covered_by.hpp000444000765000024 374012161110652 25125 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP #define BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP #include namespace boost { namespace geometry { namespace strategy { namespace covered_by { namespace services { /*! \brief Traits class binding a covered_by determination strategy to a coordinate system \ingroup covered_by \tparam TagContained tag (possibly casted) of point-type \tparam TagContained tag (possibly casted) of (possibly) containing type \tparam CsTagContained tag of coordinate system of point-type \tparam CsTagContaining tag of coordinate system of (possibly) containing type \tparam Geometry geometry-type of input (often point, or box) \tparam GeometryContaining geometry-type of input (possibly) containing type */ template < typename TagContained, typename TagContaining, typename CastedTagContained, typename CastedTagContaining, typename CsTagContained, typename CsTagContaining, typename GeometryContained, typename GeometryContaining > struct default_strategy { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THESE_TYPES , (types) ); }; } // namespace services }} // namespace strategy::covered_by }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP default_area_result.hpp000444000765000024 322512161110611 27007 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_DEFAULT_AREA_RESULT_HPP #define BOOST_GEOMETRY_STRATEGIES_DEFAULT_AREA_RESULT_HPP #include #include #include #include namespace boost { namespace geometry { /*! \brief Meta-function defining return type of area function, using the default strategy \ingroup area \note The strategy defines the return-type (so this situation is different from length, where distance is sqr/sqrt, but length always squared) */ template struct default_area_result { typedef typename point_type::type point_type; typedef typename strategy::area::services::default_strategy < typename cs_tag::type, point_type >::type strategy_type; typedef typename strategy_type::return_type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_AREA_RESULT_HPP default_distance_result.hpp000444000765000024 326512161110613 27677 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_DEFAULT_DISTANCE_RESULT_HPP #define BOOST_GEOMETRY_STRATEGIES_DEFAULT_DISTANCE_RESULT_HPP #include #include #include namespace boost { namespace geometry { /*! \brief Meta-function defining return type of distance function \ingroup distance \note The strategy defines the return-type (so this situation is different from length, where distance is sqr/sqrt, but length always squared) */ template struct default_distance_result { typedef typename strategy::distance::services::return_type < typename strategy::distance::services::default_strategy < point_tag, typename point_type::type, typename point_type::type >::type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_DISTANCE_RESULT_HPP default_length_result.hpp000444000765000024 266512161110674 27400 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP #define BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP #include #include namespace boost { namespace geometry { /*! \brief Meta-function defining return type of length function \ingroup length \note Length of a line of integer coordinates can be double. So we take at least a double. If Big Number types are used, we take that type. */ template struct default_length_result { typedef typename select_most_precise < typename coordinate_type::type, long double >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP distance.hpp000444000765000024 644312161110666 24606 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_DISTANCE_HPP #define BOOST_GEOMETRY_STRATEGIES_DISTANCE_HPP #include #include #include namespace boost { namespace geometry { namespace strategy { namespace distance { namespace services { template struct tag {}; template struct return_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types) ); }; /*! \brief Metafunction delivering a similar strategy with other input point types */ template < typename Strategy, typename Point1, typename Point2 > struct similar_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY , (types) ); }; template < typename Strategy, typename Point1, typename Point2 > struct get_similar { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY , (types) ); }; template struct comparable_type { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types) ); }; template struct get_comparable { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types) ); }; template struct result_from_distance {}; // For point-segment only: template struct strategy_point_point {}; // Default strategy /*! \brief Traits class binding a default strategy for distance to one (or possibly two) coordinate system(s) \ingroup distance \tparam GeometryTag tag (point/segment) for which this strategy is the default \tparam Point1 first point-type \tparam Point2 second point-type \tparam CsTag1 tag of coordinate system of first point type \tparam CsTag2 tag of coordinate system of second point type */ template < typename GeometryTag, typename Point1, typename Point2 = Point1, typename CsTag1 = typename cs_tag::type, typename CsTag2 = typename cs_tag::type, typename UnderlyingStrategy = void > struct default_strategy { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE_COMBINATION , (types) ); }; }}} // namespace strategy::distance::services }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_DISTANCE_HPP intersection.hpp000444000765000024 561212161110603 25506 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_INTERSECTION_HPP #define BOOST_GEOMETRY_STRATEGIES_INTERSECTION_HPP #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { // The intersection strategy is a "compound strategy", // it contains a segment-intersection-strategy // and a side-strategy /*! \tparam CalculationType \tparam_calculation */ template < typename Tag, typename Geometry1, typename Geometry2, typename IntersectionPoint, typename CalculationType = void > struct strategy_intersection { private : typedef typename geometry::point_type::type point1_type; typedef typename geometry::point_type::type point2_type; typedef typename model::referring_segment segment1_type; typedef typename model::referring_segment segment2_type; typedef segment_intersection_points < IntersectionPoint > ip_type; public: typedef strategy::intersection::relate_cartesian_segments < policies::relate::segments_tupled < policies::relate::segments_intersection_points < segment1_type, segment2_type, ip_type, CalculationType > , policies::relate::segments_direction < segment1_type, segment2_type, CalculationType >, CalculationType >, CalculationType > segment_intersection_strategy_type; typedef typename strategy::side::services::default_strategy < Tag, CalculationType >::type side_strategy_type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_INTERSECTION_HPP intersection_result.hpp000444000765000024 1027212161110621 27122 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP #define BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP #if defined(HAVE_MATRIX_AS_STRING) #include #endif #include namespace boost { namespace geometry { /*! \brief Dimensionally Extended 9 Intersection Matrix \details \ingroup overlay \see http://gis.hsr.ch/wiki/images/3/3d/9dem_springer.pdf */ struct de9im { int ii, ib, ie, bi, bb, be, ei, eb, ee; inline de9im() : ii(-1), ib(-1), ie(-1) , bi(-1), bb(-1), be(-1) , ei(-1), eb(-1), ee(-1) { } inline de9im(int ii0, int ib0, int ie0, int bi0, int bb0, int be0, int ei0, int eb0, int ee0) : ii(ii0), ib(ib0), ie(ie0) , bi(bi0), bb(bb0), be(be0) , ei(ei0), eb(eb0), ee(ee0) {} inline bool equals() const { return ii >= 0 && ie < 0 && be < 0 && ei < 0 && eb < 0; } inline bool disjoint() const { return ii < 0 && ib < 0 && bi < 0 && bb < 0; } inline bool intersects() const { return ii >= 0 || bb >= 0 || bi >= 0 || ib >= 0; } inline bool touches() const { return ii < 0 && (bb >= 0 || bi >= 0 || ib >= 0); } inline bool crosses() const { return (ii >= 0 && ie >= 0) || (ii == 0); } inline bool overlaps() const { return ii >= 0 && ie >= 0 && ei >= 0; } inline bool within() const { return ii >= 0 && ie < 0 && be < 0; } inline bool contains() const { return ii >= 0 && ei < 0 && eb < 0; } static inline char as_char(int v) { return v >= 0 && v < 10 ? ('0' + char(v)) : '-'; } #if defined(HAVE_MATRIX_AS_STRING) inline std::string matrix_as_string(std::string const& tab, std::string const& nl) const { std::string ret; ret.reserve(9 + tab.length() * 3 + nl.length() * 3); ret += tab; ret += as_char(ii); ret += as_char(ib); ret += as_char(ie); ret += nl; ret += tab; ret += as_char(bi); ret += as_char(bb); ret += as_char(be); ret += nl; ret += tab; ret += as_char(ei); ret += as_char(eb); ret += as_char(ee); return ret; } inline std::string matrix_as_string() const { return matrix_as_string("", ""); } #endif }; struct de9im_segment : public de9im { bool collinear; // true if segments are aligned (for equal,overlap,touch) bool opposite; // true if direction is reversed (for equal,overlap,touch) bool parallel; // true if disjoint but parallel bool degenerate; // true for segment(s) of zero length double ra, rb; // temp inline de9im_segment() : de9im() , collinear(false) , opposite(false) , parallel(false) , degenerate(false) {} inline de9im_segment(double a, double b, int ii0, int ib0, int ie0, int bi0, int bb0, int be0, int ei0, int eb0, int ee0, bool c = false, bool o = false, bool p = false, bool d = false) : de9im(ii0, ib0, ie0, bi0, bb0, be0, ei0, eb0, ee0) , collinear(c) , opposite(o) , parallel(p) , degenerate(d) , ra(a), rb(b) {} #if defined(HAVE_MATRIX_AS_STRING) inline std::string as_string() const { std::string ret = matrix_as_string(); ret += collinear ? "c" : "-"; ret += opposite ? "o" : "-"; return ret; } #endif }; template struct segment_intersection_points { std::size_t count; Point intersections[2]; typedef Point point_type; segment_intersection_points() : count(0) {} }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP side.hpp000444000765000024 261012161110612 23717 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_SIDE_HPP #define BOOST_GEOMETRY_STRATEGIES_SIDE_HPP #include namespace boost { namespace geometry { namespace strategy { namespace side { namespace services { /*! \brief Traits class binding a side determination strategy to a coordinate system \ingroup util \tparam Tag tag of coordinate system of point-type \tparam CalculationType \tparam_calculation */ template struct default_strategy { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_TYPE , (types) ); }; } // namespace services }} // namespace strategy::side }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_SIDE_HPP side_info.hpp000444000765000024 1022312161110635 24756 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_SIDE_INFO_HPP #define BOOST_GEOMETRY_STRATEGIES_SIDE_INFO_HPP #include namespace boost { namespace geometry { /*! \brief Class side_info: small class wrapping for sides (-1,0,1) */ class side_info { public : inline side_info(int side_a1 = 0, int side_a2 = 0, int side_b1 = 0, int side_b2 = 0) { sides[0].first = side_a1; sides[0].second = side_a2; sides[1].first = side_b1; sides[1].second = side_b2; } template inline void set(int first, int second) { sides[Which].first = first; sides[Which].second = second; } template inline void correct_to_zero() { if (Index == 0) { sides[Which].first = 0; } else { sides[Which].second = 0; } } template inline int get() const { return Index == 0 ? sides[Which].first : sides[Which].second; } // Returns true if both lying on the same side WRT the other // (so either 1,1 or -1-1) template inline bool same() const { return sides[Which].first * sides[Which].second == 1; } inline bool collinear() const { return sides[0].first == 0 && sides[0].second == 0 && sides[1].first == 0 && sides[1].second == 0; } inline bool crossing() const { return sides[0].first * sides[0].second == -1 && sides[1].first * sides[1].second == -1; } inline bool touching() const { return (sides[0].first * sides[1].first == -1 && sides[0].second == 0 && sides[1].second == 0) || (sides[1].first * sides[0].first == -1 && sides[1].second == 0 && sides[0].second == 0); } template inline bool one_touching() const { // This is normally a situation which can't occur: // If one is completely left or right, the other cannot touch return one_zero() && sides[1 - Which].first * sides[1 - Which].second == 1; } inline bool meeting() const { // Two of them (in each segment) zero, two not return one_zero<0>() && one_zero<1>(); } template inline bool zero() const { return sides[Which].first == 0 && sides[Which].second == 0; } template inline bool one_zero() const { return (sides[Which].first == 0 && sides[Which].second != 0) || (sides[Which].first != 0 && sides[Which].second == 0); } inline bool one_of_all_zero() const { int const sum = std::abs(sides[0].first) + std::abs(sides[0].second) + std::abs(sides[1].first) + std::abs(sides[1].second); return sum == 3; } template inline int zero_index() const { return sides[Which].first == 0 ? 0 : 1; } inline void debug() const { std::cout << sides[0].first << " " << sides[0].second << " " << sides[1].first << " " << sides[1].second << std::endl; } inline void reverse() { std::swap(sides[0], sides[1]); } //private : std::pair sides[2]; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_SIDE_INFO_HPP strategies.hpp000444000765000024 551312161110611 25151 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_STRATEGIES_HPP #define BOOST_GEOMETRY_STRATEGIES_STRATEGIES_HPP #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 #include #include #include #include #include #include #include #include #endif // BOOST_GEOMETRY_STRATEGIES_STRATEGIES_HPP strategy_transform.hpp000444000765000024 3747312161110611 26766 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_STRATEGY_TRANSFORM_HPP #define BOOST_GEOMETRY_STRATEGIES_STRATEGY_TRANSFORM_HPP #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace transform { #ifndef DOXYGEN_NO_DETAIL namespace detail { template < typename Src, typename Dst, std::size_t D, std::size_t N, template class F > struct transform_coordinates { template static inline void transform(Src const& source, Dst& dest, T value) { typedef typename select_coordinate_type::type coordinate_type; F function; set(dest, boost::numeric_cast(function(get(source), value))); transform_coordinates::transform(source, dest, value); } }; template < typename Src, typename Dst, std::size_t N, template class F > struct transform_coordinates { template static inline void transform(Src const& , Dst& , T ) { } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL /*! \brief Transformation strategy to copy one point to another using assignment operator \ingroup transform \tparam P point type */ template struct copy_direct { inline bool apply(P const& p1, P& p2) const { p2 = p1; return true; } }; /*! \brief Transformation strategy to do copy a point, copying per coordinate. \ingroup transform \tparam P1 first point type \tparam P2 second point type */ template struct copy_per_coordinate { inline bool apply(P1 const& p1, P2& p2) const { // Defensive check, dimensions are equal, selected by specialization assert_dimension_equal(); geometry::convert(p1, p2); return true; } }; /*! \brief Transformation strategy to go from degree to radian and back \ingroup transform \tparam P1 first point type \tparam P2 second point type \tparam F additional functor to divide or multiply with d2r */ template class F> struct degree_radian_vv { inline bool apply(P1 const& p1, P2& p2) const { // Spherical coordinates always have 2 coordinates measured in angles // The optional third one is distance/height, provided in another strategy // Polar coordinates having one angle, will be also in another strategy assert_dimension(); assert_dimension(); detail::transform_coordinates::transform(p1, p2, math::d2r); return true; } }; template class F> struct degree_radian_vv_3 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); assert_dimension(); detail::transform_coordinates::transform(p1, p2, math::d2r); // Copy height or other third dimension set<2>(p2, get<2>(p1)); return true; } }; #ifndef DOXYGEN_NO_DETAIL namespace detail { /// Helper function for conversion, phi/theta are in radians template inline void spherical_polar_to_cartesian(T phi, T theta, R r, P& p) { assert_dimension(); // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_spherical_coordinates // http://www.vias.org/comp_geometry/math_coord_convert_3d.htm // https://moodle.polymtl.ca/file.php/1183/Autres_Documents/Derivation_for_Spherical_Co-ordinates.pdf // http://en.citizendium.org/wiki/Spherical_polar_coordinates // Phi = first, theta is second, r is third, see documentation on cs::spherical // (calculations are splitted to implement ttmath) T r_sin_theta = r; T r_cos_theta = r; r_sin_theta *= sin(theta); r_cos_theta *= cos(theta); set<0>(p, r_sin_theta * cos(phi)); set<1>(p, r_sin_theta * sin(phi)); set<2>(p, r_cos_theta); } /// Helper function for conversion, lambda/delta (lon lat) are in radians template inline void spherical_equatorial_to_cartesian(T lambda, T delta, R r, P& p) { assert_dimension(); // http://mathworld.wolfram.com/GreatCircle.html // http://www.spenvis.oma.be/help/background/coortran/coortran.html WRONG T r_cos_delta = r; T r_sin_delta = r; r_cos_delta *= cos(delta); r_sin_delta *= sin(delta); set<0>(p, r_cos_delta * cos(lambda)); set<1>(p, r_cos_delta * sin(lambda)); set<2>(p, r_sin_delta); } /// Helper function for conversion template inline bool cartesian_to_spherical2(T x, T y, T z, P& p) { assert_dimension(); // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates #if defined(BOOST_GEOMETRY_TRANSFORM_CHECK_UNIT_SPHERE) // TODO: MAYBE ONLY IF TO BE CHECKED? T const r = /*sqrt not necessary, sqrt(1)=1*/ (x * x + y * y + z * z); // Unit sphere, so r should be 1 if (geometry::math::abs(r - 1.0) > T(1e-6)) { return false; } // end todo #endif set_from_radian<0>(p, atan2(y, x)); set_from_radian<1>(p, acos(z)); return true; } template inline bool cartesian_to_spherical_equatorial2(T x, T y, T z, P& p) { assert_dimension(); set_from_radian<0>(p, atan2(y, x)); set_from_radian<1>(p, asin(z)); return true; } template inline bool cartesian_to_spherical3(T x, T y, T z, P& p) { assert_dimension(); // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates T const r = sqrt(x * x + y * y + z * z); set<2>(p, r); set_from_radian<0>(p, atan2(y, x)); if (r > 0.0) { set_from_radian<1>(p, acos(z / r)); return true; } return false; } template inline bool cartesian_to_spherical_equatorial3(T x, T y, T z, P& p) { assert_dimension(); // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates T const r = sqrt(x * x + y * y + z * z); set<2>(p, r); set_from_radian<0>(p, atan2(y, x)); if (r > 0.0) { set_from_radian<1>(p, asin(z / r)); return true; } return false; } } // namespace detail #endif // DOXYGEN_NO_DETAIL /*! \brief Transformation strategy for 2D spherical (phi,theta) to 3D cartesian (x,y,z) \details on Unit sphere \ingroup transform \tparam P1 first point type \tparam P2 second point type */ template struct from_spherical_polar_2_to_cartesian_3 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); detail::spherical_polar_to_cartesian(get_as_radian<0>(p1), get_as_radian<1>(p1), 1.0, p2); return true; } }; template struct from_spherical_equatorial_2_to_cartesian_3 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); detail::spherical_equatorial_to_cartesian(get_as_radian<0>(p1), get_as_radian<1>(p1), 1.0, p2); return true; } }; /*! \brief Transformation strategy for 3D spherical (phi,theta,r) to 3D cartesian (x,y,z) \ingroup transform \tparam P1 first point type \tparam P2 second point type */ template struct from_spherical_polar_3_to_cartesian_3 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); detail::spherical_polar_to_cartesian( get_as_radian<0>(p1), get_as_radian<1>(p1), get<2>(p1), p2); return true; } }; template struct from_spherical_equatorial_3_to_cartesian_3 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); detail::spherical_equatorial_to_cartesian( get_as_radian<0>(p1), get_as_radian<1>(p1), get<2>(p1), p2); return true; } }; /*! \brief Transformation strategy for 3D cartesian (x,y,z) to 2D spherical (phi,theta) \details on Unit sphere \ingroup transform \tparam P1 first point type \tparam P2 second point type \note If x,y,z point is not lying on unit sphere, transformation will return false */ template struct from_cartesian_3_to_spherical_polar_2 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); return detail::cartesian_to_spherical2(get<0>(p1), get<1>(p1), get<2>(p1), p2); } }; template struct from_cartesian_3_to_spherical_equatorial_2 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); return detail::cartesian_to_spherical_equatorial2(get<0>(p1), get<1>(p1), get<2>(p1), p2); } }; /*! \brief Transformation strategy for 3D cartesian (x,y,z) to 3D spherical (phi,theta,r) \ingroup transform \tparam P1 first point type \tparam P2 second point type */ template struct from_cartesian_3_to_spherical_polar_3 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); return detail::cartesian_to_spherical3(get<0>(p1), get<1>(p1), get<2>(p1), p2); } }; template struct from_cartesian_3_to_spherical_equatorial_3 { inline bool apply(P1 const& p1, P2& p2) const { assert_dimension(); return detail::cartesian_to_spherical_equatorial3(get<0>(p1), get<1>(p1), get<2>(p1), p2); } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { /// Specialization for same coordinate system family, same system, same dimension, same point type, can be copied template struct default_strategy { typedef copy_direct

type; }; /// Specialization for same coordinate system family and system, same dimension, different point type, copy per coordinate template struct default_strategy { typedef copy_per_coordinate type; }; /// Specialization to transform from degree to radian for any coordinate system / point type combination template class CoordSys, typename P1, typename P2> struct default_strategy, CoordSys, 2, 2, P1, P2> { typedef degree_radian_vv type; }; /// Specialization to transform from radian to degree for any coordinate system / point type combination template class CoordSys, typename P1, typename P2> struct default_strategy, CoordSys, 2, 2, P1, P2> { typedef degree_radian_vv type; }; /// Specialization degree->radian in 3D template class CoordSys, typename P1, typename P2> struct default_strategy, CoordSys, 3, 3, P1, P2> { typedef degree_radian_vv_3 type; }; /// Specialization radian->degree in 3D template class CoordSys, typename P1, typename P2> struct default_strategy, CoordSys, 3, 3, P1, P2> { typedef degree_radian_vv_3 type; }; /// Specialization to transform from unit sphere(phi,theta) to XYZ template struct default_strategy { typedef from_spherical_polar_2_to_cartesian_3 type; }; /// Specialization to transform from sphere(phi,theta,r) to XYZ template struct default_strategy { typedef from_spherical_polar_3_to_cartesian_3 type; }; template struct default_strategy { typedef from_spherical_equatorial_2_to_cartesian_3 type; }; template struct default_strategy { typedef from_spherical_equatorial_3_to_cartesian_3 type; }; /// Specialization to transform from XYZ to unit sphere(phi,theta) template struct default_strategy { typedef from_cartesian_3_to_spherical_polar_2 type; }; template struct default_strategy { typedef from_cartesian_3_to_spherical_equatorial_2 type; }; /// Specialization to transform from XYZ to sphere(phi,theta,r) template struct default_strategy { typedef from_cartesian_3_to_spherical_polar_3 type; }; template struct default_strategy { typedef from_cartesian_3_to_spherical_equatorial_3 type; }; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::transform }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_STRATEGY_TRANSFORM_HPP tags.hpp000444000765000024 254012161110614 23735 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_TAGS_HPP #define BOOST_GEOMETRY_STRATEGIES_TAGS_HPP namespace boost { namespace geometry { namespace strategy { /*! \brief Indicate compiler/library user that strategy is not implemented. \details Strategies are defined for point types or for point type combinations. If there is no implementation for that specific point type, or point type combination, the calculation cannot be done. To indicate this, this not_implemented class is used as a typedef stub. */ struct not_implemented {}; } struct strategy_tag_distance_point_point {}; struct strategy_tag_distance_point_segment {}; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_TAGS_HPP transform.hpp000444000765000024 360212161110643 25014 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_TRANSFORM_HPP #define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_HPP #include #include #include namespace boost { namespace geometry { namespace strategy { namespace transform { namespace services { /*! \brief Traits class binding a transformation strategy to a coordinate system \ingroup transform \details Can be specialized - per coordinate system family (tag) - per coordinate system (or groups of them) - per dimension - per point type \tparam CoordinateSystemTag 1,2 coordinate system tags \tparam CoordinateSystem 1,2 coordinate system \tparam D 1, 2 dimension \tparam Point 1, 2 point type */ template < typename CoordinateSystemTag1, typename CoordinateSystemTag2, typename CoordinateSystem1, typename CoordinateSystem2, std::size_t Dimension1, std::size_t Dimension2, typename Point1, typename Point2 > struct default_strategy { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPES , (types) ); }; }}} // namespace strategy::transform::services }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_HPP within.hpp000444000765000024 370212161110613 24301 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_WITHIN_HPP #define BOOST_GEOMETRY_STRATEGIES_WITHIN_HPP #include namespace boost { namespace geometry { namespace strategy { namespace within { namespace services { /*! \brief Traits class binding a within determination strategy to a coordinate system \ingroup within \tparam TagContained tag (possibly casted) of point-type \tparam TagContained tag (possibly casted) of (possibly) containing type \tparam CsTagContained tag of coordinate system of point-type \tparam CsTagContaining tag of coordinate system of (possibly) containing type \tparam Geometry geometry-type of input (often point, or box) \tparam GeometryContaining geometry-type of input (possibly) containing type */ template < typename TagContained, typename TagContaining, typename CastedTagContained, typename CastedTagContaining, typename CsTagContained, typename CsTagContaining, typename GeometryContained, typename GeometryContaining > struct default_strategy { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THESE_TYPES , (types) ); }; } // namespace services }} // namespace strategy::within }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_WITHIN_HPP agnostic000755000765000024 012161110701 23734 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategieshull_graham_andrew.hpp000444000765000024 2564512161110601 30460 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/agnostic// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_CONVEX_GRAHAM_ANDREW_HPP #define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_CONVEX_GRAHAM_ANDREW_HPP #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace convex_hull { #ifndef DOXYGEN_NO_DETAIL namespace detail { template < typename InputRange, typename RangeIterator, typename StrategyLess, typename StrategyGreater > struct get_extremes { typedef typename point_type::type point_type; point_type left, right; bool first; StrategyLess less; StrategyGreater greater; inline get_extremes() : first(true) {} inline void apply(InputRange const& range) { if (boost::size(range) == 0) { return; } // First iterate through this range // (this two-stage approach avoids many point copies, // because iterators are kept in memory. Because iterators are // not persistent (in MSVC) this approach is not applicable // for more ranges together) RangeIterator left_it = boost::begin(range); RangeIterator right_it = boost::begin(range); for (RangeIterator it = boost::begin(range) + 1; it != boost::end(range); ++it) { if (less(*it, *left_it)) { left_it = it; } if (greater(*it, *right_it)) { right_it = it; } } // Then compare with earlier if (first) { // First time, assign left/right left = *left_it; right = *right_it; first = false; } else { // Next time, check if this range was left/right from // the extremes already collected if (less(*left_it, left)) { left = *left_it; } if (greater(*right_it, right)) { right = *right_it; } } } }; template < typename InputRange, typename RangeIterator, typename Container, typename SideStrategy > struct assign_range { Container lower_points, upper_points; typedef typename point_type::type point_type; point_type const& most_left; point_type const& most_right; inline assign_range(point_type const& left, point_type const& right) : most_left(left) , most_right(right) {} inline void apply(InputRange const& range) { typedef SideStrategy side; // Put points in one of the two output sequences for (RangeIterator it = boost::begin(range); it != boost::end(range); ++it) { // check if it is lying most_left or most_right from the line int dir = side::apply(most_left, most_right, *it); switch(dir) { case 1 : // left side upper_points.push_back(*it); break; case -1 : // right side lower_points.push_back(*it); break; // 0: on line most_left-most_right, // or most_left, or most_right, // -> all never part of hull } } } }; template static inline void sort(Range& range) { typedef typename boost::range_value::type point_type; typedef geometry::less comparator; std::sort(boost::begin(range), boost::end(range), comparator()); } } // namespace detail #endif // DOXYGEN_NO_DETAIL /*! \brief Graham scan strategy to calculate convex hull \ingroup strategies \note Completely reworked version inspired on the sources listed below \see http://www.ddj.com/architect/201806315 \see http://marknelson.us/2007/08/22/convex */ template class graham_andrew { public : typedef OutputPoint point_type; typedef InputGeometry geometry_type; private: typedef typename cs_tag::type cs_tag; typedef typename std::vector container_type; typedef typename std::vector::const_iterator iterator; typedef typename std::vector::const_reverse_iterator rev_iterator; class partitions { friend class graham_andrew; container_type m_lower_hull; container_type m_upper_hull; container_type m_copied_input; }; public: typedef partitions state_type; inline void apply(InputGeometry const& geometry, partitions& state) const { // First pass. // Get min/max (in most cases left / right) points // This makes use of the geometry::less/greater predicates // For the left boundary it is important that multiple points // are sorted from bottom to top. Therefore the less predicate // does not take the x-only template parameter (this fixes ticket #6019. // For the right boundary it is not necessary (though also not harmful), // because points are sorted from bottom to top in a later stage. // For symmetry and to get often more balanced lower/upper halves // we keep it. typedef typename geometry::detail::range_type::type range_type; typedef typename boost::range_iterator < range_type const >::type range_iterator; detail::get_extremes < range_type, range_iterator, geometry::less, geometry::greater > extremes; geometry::detail::for_each_range(geometry, extremes); // Bounding left/right points // Second pass, now that extremes are found, assign all points // in either lower, either upper detail::assign_range < range_type, range_iterator, container_type, typename strategy::side::services::default_strategy::type > assigner(extremes.left, extremes.right); geometry::detail::for_each_range(geometry, assigner); // Sort both collections, first on x(, then on y) detail::sort(assigner.lower_points); detail::sort(assigner.upper_points); //std::cout << boost::size(assigner.lower_points) << std::endl; //std::cout << boost::size(assigner.upper_points) << std::endl; // And decide which point should be in the final hull build_half_hull<-1>(assigner.lower_points, state.m_lower_hull, extremes.left, extremes.right); build_half_hull<1>(assigner.upper_points, state.m_upper_hull, extremes.left, extremes.right); } template inline void result(partitions const& state, OutputIterator out, bool clockwise) const { if (clockwise) { output_range(state.m_upper_hull, out, false); output_range(state.m_lower_hull, out, true); } else { output_range(state.m_lower_hull, out, false); output_range(state.m_upper_hull, out, true); } } private: template static inline void build_half_hull(container_type const& input, container_type& output, point_type const& left, point_type const& right) { output.push_back(left); for(iterator it = input.begin(); it != input.end(); ++it) { add_to_hull(*it, output); } add_to_hull(right, output); } template static inline void add_to_hull(point_type const& p, container_type& output) { typedef typename strategy::side::services::default_strategy::type side; output.push_back(p); register std::size_t output_size = output.size(); while (output_size >= 3) { rev_iterator rit = output.rbegin(); point_type const& last = *rit++; point_type const& last2 = *rit++; if (Factor * side::apply(*rit, last, last2) <= 0) { // Remove last two points from stack, and add last again // This is much faster then erasing the one but last. output.pop_back(); output.pop_back(); output.push_back(last); output_size--; } else { return; } } } template static inline void output_range(container_type const& range, OutputIterator out, bool skip_first) { typedef typename reversible_view::type view_type; view_type view(range); bool first = true; for (typename boost::range_iterator::type it = boost::begin(view); it != boost::end(view); ++it) { if (first && skip_first) { first = false; } else { *out = *it; ++out; } } } }; }} // namespace strategy::convex_hull #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS template struct strategy_convex_hull { typedef strategy::convex_hull::graham_andrew type; }; #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_CONVEX_GRAHAM_ANDREW_HPP point_in_box_by_side.hpp000444000765000024 735112161110701 30775 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/agnostic// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP #define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace within { struct decide_within { static inline bool apply(int side, bool& result) { if (side != 1) { result = false; return false; } return true; // continue } }; struct decide_covered_by { static inline bool apply(int side, bool& result) { if (side != 1) { result = side >= 0; return false; } return true; // continue } }; template struct point_in_box_by_side { typedef typename strategy::side::services::default_strategy < typename cs_tag::type >::type side_strategy_type; static inline bool apply(Point const& point, Box const& box) { // Create (counterclockwise) array of points, the fifth one closes it // Every point should be on the LEFT side (=1), or ON the border (=0), // So >= 1 or >= 0 boost::array::type, 5> bp; geometry::detail::assign_box_corners_oriented(box, bp); bp[4] = bp[0]; bool result = true; side_strategy_type strategy; boost::ignore_unused_variable_warning(strategy); for (int i = 1; i < 5; i++) { int const side = strategy.apply(point, bp[i - 1], bp[i]); if (! Decide::apply(side, result)) { return result; } } return result; } }; } // namespace within #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace within { namespace services { template struct default_strategy < point_tag, box_tag, point_tag, areal_tag, spherical_tag, spherical_tag, Point, Box > { typedef within::point_in_box_by_side < Point, Box, within::decide_within > type; }; }} // namespace within::services namespace covered_by { namespace services { template struct default_strategy < point_tag, box_tag, point_tag, areal_tag, spherical_tag, spherical_tag, Point, Box > { typedef within::point_in_box_by_side < Point, Box, within::decide_covered_by > type; }; }} // namespace covered_by::services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }}} // namespace boost::geometry::strategy #endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP point_in_poly_oriented_winding.hpp000444000765000024 1402012161110700 33110 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/agnostic// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_ORIENTED_WINDING_HPP #define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_ORIENTED_WINDING_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace within { /*! \brief Within detection using winding rule, but checking if enclosing ring is counter clockwise and, if so, reverses the result \ingroup strategies \tparam Point \tparam_point \tparam Reverse True if parameter should be reversed \tparam PointOfSegment \tparam_segment_point \tparam CalculationType \tparam_calculation \author Barend Gehrels \note The implementation is inspired by terralib http://www.terralib.org (LGPL) \note but totally revised afterwards, especially for cases on segments \note Only dependant on "side", -> agnostic, suitable for spherical/latlong \qbk{ [heading See also] [link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)] } */ template < bool Reverse, typename Point, typename PointOfSegment = Point, typename CalculationType = void > class oriented_winding { typedef typename select_calculation_type < Point, PointOfSegment, CalculationType >::type calculation_type; typedef typename strategy::side::services::default_strategy < typename cs_tag::type >::type strategy_side_type; /*! subclass to keep state */ class counter { int m_count; bool m_touches; calculation_type m_sum_area; inline int code() const { return m_touches ? 0 : m_count == 0 ? -1 : 1; } inline int clockwise_oriented_code() const { return (m_sum_area > 0) ? code() : -code(); } inline int oriented_code() const { return Reverse ? -clockwise_oriented_code() : clockwise_oriented_code(); } public : friend class oriented_winding; inline counter() : m_count(0) , m_touches(false) , m_sum_area(0) {} inline void add_to_area(calculation_type triangle) { m_sum_area += triangle; } }; template static inline int check_touch(Point const& point, PointOfSegment const& seg1, PointOfSegment const& seg2, counter& state) { calculation_type const p = get(point); calculation_type const s1 = get(seg1); calculation_type const s2 = get(seg2); if ((s1 <= p && s2 >= p) || (s2 <= p && s1 >= p)) { state.m_touches = true; } return 0; } template static inline int check_segment(Point const& point, PointOfSegment const& seg1, PointOfSegment const& seg2, counter& state) { calculation_type const p = get(point); calculation_type const s1 = get(seg1); calculation_type const s2 = get(seg2); // Check if one of segment endpoints is at same level of point bool eq1 = math::equals(s1, p); bool eq2 = math::equals(s2, p); if (eq1 && eq2) { // Both equal p -> segment is horizontal (or vertical for D=0) // The only thing which has to be done is check if point is ON segment return check_touch<1 - D>(point, seg1, seg2, state); } return eq1 ? (s2 > p ? 1 : -1) // Point on level s1, UP/DOWN depending on s2 : eq2 ? (s1 > p ? -1 : 1) // idem : s1 < p && s2 > p ? 2 // Point between s1 -> s2 --> UP : s2 < p && s1 > p ? -2 // Point between s2 -> s1 --> DOWN : 0; } public : // Typedefs and static methods to fulfill the concept typedef Point point_type; typedef PointOfSegment segment_point_type; typedef counter state_type; static inline bool apply(Point const& point, PointOfSegment const& s1, PointOfSegment const& s2, counter& state) { state.add_to_area(get<0>(s2) * get<1>(s1) - get<0>(s1) * get<1>(s2)); int count = check_segment<1>(point, s1, s2, state); if (count != 0) { int side = strategy_side_type::apply(s1, s2, point); if (side == 0) { // Point is lying on segment state.m_touches = true; state.m_count = 0; return false; } // Side is NEG for right, POS for left. // The count is -2 for down, 2 for up (or -1/1) // Side positive thus means UP and LEFTSIDE or DOWN and RIGHTSIDE // See accompagnying figure (TODO) if (side * count > 0) { state.m_count += count; } } return ! state.m_touches; } static inline int result(counter const& state) { return state.oriented_code(); } }; }} // namespace strategy::within }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_ORIENTED_WINDING_HPP point_in_poly_winding.hpp000444000765000024 1534112161110604 31231 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/agnostic// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_WINDING_HPP #define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_WINDING_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace within { /*! \brief Within detection using winding rule \ingroup strategies \tparam Point \tparam_point \tparam PointOfSegment \tparam_segment_point \tparam CalculationType \tparam_calculation \author Barend Gehrels \note The implementation is inspired by terralib http://www.terralib.org (LGPL) \note but totally revised afterwards, especially for cases on segments \note Only dependant on "side", -> agnostic, suitable for spherical/latlong \qbk{ [heading See also] [link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)] } */ template < typename Point, typename PointOfSegment = Point, typename CalculationType = void > class winding { typedef typename select_calculation_type < Point, PointOfSegment, CalculationType >::type calculation_type; typedef typename strategy::side::services::default_strategy < typename cs_tag::type >::type strategy_side_type; /*! subclass to keep state */ class counter { int m_count; bool m_touches; inline int code() const { return m_touches ? 0 : m_count == 0 ? -1 : 1; } public : friend class winding; inline counter() : m_count(0) , m_touches(false) {} }; template static inline int check_touch(Point const& point, PointOfSegment const& seg1, PointOfSegment const& seg2, counter& state) { calculation_type const p = get(point); calculation_type const s1 = get(seg1); calculation_type const s2 = get(seg2); if ((s1 <= p && s2 >= p) || (s2 <= p && s1 >= p)) { state.m_touches = true; } return 0; } template static inline int check_segment(Point const& point, PointOfSegment const& seg1, PointOfSegment const& seg2, counter& state) { calculation_type const p = get(point); calculation_type const s1 = get(seg1); calculation_type const s2 = get(seg2); // Check if one of segment endpoints is at same level of point bool eq1 = math::equals(s1, p); bool eq2 = math::equals(s2, p); if (eq1 && eq2) { // Both equal p -> segment is horizontal (or vertical for D=0) // The only thing which has to be done is check if point is ON segment return check_touch<1 - D>(point, seg1, seg2,state); } return eq1 ? (s2 > p ? 1 : -1) // Point on level s1, UP/DOWN depending on s2 : eq2 ? (s1 > p ? -1 : 1) // idem : s1 < p && s2 > p ? 2 // Point between s1 -> s2 --> UP : s2 < p && s1 > p ? -2 // Point between s2 -> s1 --> DOWN : 0; } public : // Typedefs and static methods to fulfill the concept typedef Point point_type; typedef PointOfSegment segment_point_type; typedef counter state_type; static inline bool apply(Point const& point, PointOfSegment const& s1, PointOfSegment const& s2, counter& state) { int count = check_segment<1>(point, s1, s2, state); if (count != 0) { int side = strategy_side_type::apply(s1, s2, point); if (side == 0) { // Point is lying on segment state.m_touches = true; state.m_count = 0; return false; } // Side is NEG for right, POS for left. // The count is -2 for down, 2 for up (or -1/1) // Side positive thus means UP and LEFTSIDE or DOWN and RIGHTSIDE // See accompagnying figure (TODO) if (side * count > 0) { state.m_count += count; } } return ! state.m_touches; } static inline int result(counter const& state) { return state.code(); } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { // Register using "areal_tag" for ring, polygon, multi-polygon template struct default_strategy { typedef winding::type> type; }; template struct default_strategy { typedef winding::type> type; }; } // namespace services #endif }} // namespace strategy::within #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace strategy { namespace covered_by { namespace services { // Register using "areal_tag" for ring, polygon, multi-polygon template struct default_strategy { typedef strategy::within::winding::type> type; }; template struct default_strategy { typedef strategy::within::winding::type> type; }; }}} // namespace strategy::covered_by::services #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_WINDING_HPP simplify_douglas_peucker.hpp000444000765000024 1621312161110644 31723 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/agnostic// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 1995, 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 1995 Maarten Hilferink, Amsterdam, the Netherlands // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGY_AGNOSTIC_SIMPLIFY_DOUGLAS_PEUCKER_HPP #define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_SIMPLIFY_DOUGLAS_PEUCKER_HPP #include #include #include #include #include //#define GL_DEBUG_DOUGLAS_PEUCKER #ifdef GL_DEBUG_DOUGLAS_PEUCKER #include #endif namespace boost { namespace geometry { namespace strategy { namespace simplify { #ifndef DOXYGEN_NO_DETAIL namespace detail { /*! \brief Small wrapper around a point, with an extra member "included" \details It has a const-reference to the original point (so no copy here) \tparam the enclosed point type */ template struct douglas_peucker_point { Point const& p; bool included; inline douglas_peucker_point(Point const& ap) : p(ap) , included(false) {} // Necessary for proper compilation inline douglas_peucker_point operator=(douglas_peucker_point const& ) { return douglas_peucker_point(*this); } }; } #endif // DOXYGEN_NO_DETAIL /*! \brief Implements the simplify algorithm. \ingroup strategies \details The douglas_peucker strategy simplifies a linestring, ring or vector of points using the well-known Douglas-Peucker algorithm. For the algorithm, see for example: \see http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm \see http://www2.dcs.hull.ac.uk/CISRG/projects/Royal-Inst/demos/dp.html \tparam Point the point type \tparam PointDistanceStrategy point-segment distance strategy to be used \note This strategy uses itself a point-segment-distance strategy which can be specified \author Barend and Maarten, 1995/1996 \author Barend, revised for Generic Geometry Library, 2008 */ template < typename Point, typename PointDistanceStrategy > class douglas_peucker { public : // See also ticket 5954 https://svn.boost.org/trac/boost/ticket/5954 // Comparable is currently not possible here because it has to be compared to the squared of max_distance, and more. // For now we have to take the real distance. typedef PointDistanceStrategy distance_strategy_type; // typedef typename strategy::distance::services::comparable_type::type distance_strategy_type; typedef typename strategy::distance::services::return_type::type return_type; private : typedef detail::douglas_peucker_point dp_point_type; typedef typename std::vector::iterator iterator_type; static inline void consider(iterator_type begin, iterator_type end, return_type const& max_dist, int& n, distance_strategy_type const& ps_distance_strategy) { std::size_t size = end - begin; // size must be at least 3 // because we want to consider a candidate point in between if (size <= 2) { #ifdef GL_DEBUG_DOUGLAS_PEUCKER if (begin != end) { std::cout << "ignore between " << dsv(begin->p) << " and " << dsv((end - 1)->p) << " size=" << size << std::endl; } std::cout << "return because size=" << size << std::endl; #endif return; } iterator_type last = end - 1; #ifdef GL_DEBUG_DOUGLAS_PEUCKER std::cout << "find between " << dsv(begin->p) << " and " << dsv(last->p) << " size=" << size << std::endl; #endif // Find most far point, compare to the current segment //geometry::segment s(begin->p, last->p); return_type md(-1.0); // any value < 0 iterator_type candidate; for(iterator_type it = begin + 1; it != last; ++it) { return_type dist = ps_distance_strategy.apply(it->p, begin->p, last->p); #ifdef GL_DEBUG_DOUGLAS_PEUCKER std::cout << "consider " << dsv(it->p) << " at " << double(dist) << ((dist > max_dist) ? " maybe" : " no") << std::endl; #endif if (dist > md) { md = dist; candidate = it; } } // If a point is found, set the include flag // and handle segments in between recursively if (md > max_dist) { #ifdef GL_DEBUG_DOUGLAS_PEUCKER std::cout << "use " << dsv(candidate->p) << std::endl; #endif candidate->included = true; n++; consider(begin, candidate + 1, max_dist, n, ps_distance_strategy); consider(candidate, end, max_dist, n, ps_distance_strategy); } } public : template static inline OutputIterator apply(Range const& range, OutputIterator out, double max_distance) { distance_strategy_type strategy; // Copy coordinates, a vector of references to all points std::vector ref_candidates(boost::begin(range), boost::end(range)); // Include first and last point of line, // they are always part of the line int n = 2; ref_candidates.front().included = true; ref_candidates.back().included = true; // Get points, recursively, including them if they are further away // than the specified distance typedef typename strategy::distance::services::return_type::type return_type; consider(boost::begin(ref_candidates), boost::end(ref_candidates), max_distance, n, strategy); // Copy included elements to the output for(typename std::vector::const_iterator it = boost::begin(ref_candidates); it != boost::end(ref_candidates); ++it) { if (it->included) { // copy-coordinates does not work because OutputIterator // does not model Point (??) //geometry::convert(it->p, *out); *out = it->p; out++; } } return out; } }; }} // namespace strategy::simplify }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_SIMPLIFY_DOUGLAS_PEUCKER_HPP cartesian000755000765000024 012161110673 24106 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategiesarea_surveyor.hpp000444000765000024 662512161110652 27650 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_SURVEYOR_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_SURVEYOR_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace area { /*! \brief Area calculation for cartesian points \ingroup strategies \details Calculates area using the Surveyor's formula, a well-known triangulation algorithm \tparam PointOfSegment \tparam_segment_point \tparam CalculationType \tparam_calculation \qbk{ [heading See also] [link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)] } */ template < typename PointOfSegment, typename CalculationType = void > class surveyor { public : // If user specified a calculation type, use that type, // whatever it is and whatever the point-type is. // Else, use the pointtype, but at least double typedef typename boost::mpl::if_c < boost::is_void::type::value, typename select_most_precise < typename coordinate_type::type, double >::type, CalculationType >::type return_type; private : class summation { friend class surveyor; return_type sum; public : inline summation() : sum(return_type()) { // Strategy supports only 2D areas assert_dimension(); } inline return_type area() const { return_type result = sum; return_type const two = 2; result /= two; return result; } }; public : typedef summation state_type; typedef PointOfSegment segment_point_type; static inline void apply(PointOfSegment const& p1, PointOfSegment const& p2, summation& state) { // SUM += x2 * y1 - x1 * y2; state.sum += detail::determinant(p2, p1); } static inline return_type result(summation const& state) { return state.area(); } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template struct default_strategy { typedef strategy::area::surveyor type; }; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::area }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_SURVEYOR_HPP box_in_box.hpp000444000765000024 1072112161110663 27122 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace within { struct box_within_range { template static inline bool apply(BoxContainedValue const& bed_min , BoxContainedValue const& bed_max , BoxContainingValue const& bing_min , BoxContainingValue const& bing_max) { return bed_min > bing_min && bed_max < bing_max; } }; struct box_covered_by_range { template static inline bool apply(BoxContainedValue const& bed_min , BoxContainedValue const& bed_max , BoxContainingValue const& bing_min , BoxContainingValue const& bing_max) { return bed_min >= bing_min && bed_max <= bing_max; } }; template < typename SubStrategy, typename Box1, typename Box2, std::size_t Dimension, std::size_t DimensionCount > struct relate_box_box_loop { static inline bool apply(Box1 const& b_contained, Box2 const& b_containing) { assert_dimension_equal(); if (! SubStrategy::apply( get(b_contained), get(b_contained), get(b_containing), get(b_containing) ) ) { return false; } return relate_box_box_loop < SubStrategy, Box1, Box2, Dimension + 1, DimensionCount >::apply(b_contained, b_containing); } }; template < typename SubStrategy, typename Box1, typename Box2, std::size_t DimensionCount > struct relate_box_box_loop { static inline bool apply(Box1 const& , Box2 const& ) { return true; } }; template < typename Box1, typename Box2, typename SubStrategy = box_within_range > struct box_in_box { static inline bool apply(Box1 const& box1, Box2 const& box2) { return relate_box_box_loop < SubStrategy, Box1, Box2, 0, dimension::type::value >::apply(box1, box2); } }; } // namespace within #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace within { namespace services { template struct default_strategy < box_tag, box_tag, box_tag, areal_tag, cartesian_tag, cartesian_tag, BoxContained, BoxContaining > { typedef within::box_in_box type; }; }} // namespace within::services namespace covered_by { namespace services { template struct default_strategy < box_tag, box_tag, box_tag, areal_tag, cartesian_tag, cartesian_tag, BoxContained, BoxContaining > { typedef within::box_in_box < BoxContained, BoxContaining, within::box_covered_by_range > type; }; }} // namespace covered_by::services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }}} // namespace boost::geometry::strategy #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP cart_intersect.hpp000444000765000024 7325112161110656 30016 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_INTERSECTION_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_INTERSECTION_HPP #include #include #include #include #include #include #include #include // Temporary / will be Strategy as template parameter #include #include #include namespace boost { namespace geometry { namespace strategy { namespace intersection { #ifndef DOXYGEN_NO_DETAIL namespace detail { template static inline void segment_arrange(Segment const& s, T& s_1, T& s_2, bool& swapped) { s_1 = get<0, Dimension>(s); s_2 = get<1, Dimension>(s); if (s_1 > s_2) { std::swap(s_1, s_2); swapped = true; } } template inline typename geometry::point_type::type get_from_index( Segment const& segment) { typedef typename geometry::point_type::type point_type; point_type point; geometry::detail::assign::assign_point_from_index < Segment, point_type, Index, 0, dimension::type::value >::apply(segment, point); return point; } } #endif /*** template inline std::string rdebug(T const& value) { if (math::equals(value, 0)) return "'0'"; if (math::equals(value, 1)) return "'1'"; if (value < 0) return "<0"; if (value > 1) return ">1"; return "<0..1>"; } ***/ /*! \see http://mathworld.wolfram.com/Line-LineIntersection.html */ template struct relate_cartesian_segments { typedef typename Policy::return_type return_type; typedef typename Policy::segment_type1 segment_type1; typedef typename Policy::segment_type2 segment_type2; //typedef typename point_type::type point_type; //BOOST_CONCEPT_ASSERT( (concept::Point) ); BOOST_CONCEPT_ASSERT( (concept::ConstSegment) ); BOOST_CONCEPT_ASSERT( (concept::ConstSegment) ); typedef typename select_calculation_type ::type coordinate_type; /// Relate segments a and b static inline return_type apply(segment_type1 const& a, segment_type2 const& b) { coordinate_type const dx_a = get<1, 0>(a) - get<0, 0>(a); // distance in x-dir coordinate_type const dx_b = get<1, 0>(b) - get<0, 0>(b); coordinate_type const dy_a = get<1, 1>(a) - get<0, 1>(a); // distance in y-dir coordinate_type const dy_b = get<1, 1>(b) - get<0, 1>(b); return apply(a, b, dx_a, dy_a, dx_b, dy_b); } // Relate segments a and b using precalculated differences. // This can save two or four subtractions in many cases static inline return_type apply(segment_type1 const& a, segment_type2 const& b, coordinate_type const& dx_a, coordinate_type const& dy_a, coordinate_type const& dx_b, coordinate_type const& dy_b) { typedef side::side_by_triangle side; side_info sides; coordinate_type const zero = 0; bool const a_is_point = math::equals(dx_a, zero) && math::equals(dy_a, zero); bool const b_is_point = math::equals(dx_b, zero) && math::equals(dy_b, zero); if(a_is_point && b_is_point) { if(math::equals(get<1,0>(a), get<1,0>(b)) && math::equals(get<1,1>(a), get<1,1>(b))) { Policy::degenerate(a, true); } else { return Policy::disjoint(); } } bool collinear_use_first = math::abs(dx_a) + math::abs(dx_b) >= math::abs(dy_a) + math::abs(dy_b); sides.set<0> ( side::apply(detail::get_from_index<0>(b) , detail::get_from_index<1>(b) , detail::get_from_index<0>(a)), side::apply(detail::get_from_index<0>(b) , detail::get_from_index<1>(b) , detail::get_from_index<1>(a)) ); sides.set<1> ( side::apply(detail::get_from_index<0>(a) , detail::get_from_index<1>(a) , detail::get_from_index<0>(b)), side::apply(detail::get_from_index<0>(a) , detail::get_from_index<1>(a) , detail::get_from_index<1>(b)) ); bool collinear = sides.collinear(); robustness_verify_collinear(a, b, a_is_point, b_is_point, sides, collinear); robustness_verify_meeting(a, b, sides, collinear, collinear_use_first); if (sides.same<0>() || sides.same<1>()) { // Both points are at same side of other segment, we can leave if (robustness_verify_same_side(a, b, sides)) { return Policy::disjoint(); } } // Degenerate cases: segments of single point, lying on other segment, non disjoint if (a_is_point) { return Policy::degenerate(a, true); } if (b_is_point) { return Policy::degenerate(b, false); } typedef typename select_most_precise < coordinate_type, double >::type promoted_type; // r: ratio 0-1 where intersection divides A/B // (only calculated for non-collinear segments) promoted_type r; if (! collinear) { // Calculate determinants - Cramers rule coordinate_type const wx = get<0, 0>(a) - get<0, 0>(b); coordinate_type const wy = get<0, 1>(a) - get<0, 1>(b); coordinate_type const d = geometry::detail::determinant(dx_a, dy_a, dx_b, dy_b); coordinate_type const da = geometry::detail::determinant(dx_b, dy_b, wx, wy); coordinate_type const zero = coordinate_type(); if (math::equals(d, zero)) { // This is still a collinear case (because of FP imprecision this can occur here) // sides.debug(); sides.set<0>(0,0); sides.set<1>(0,0); collinear = true; } else { r = promoted_type(da) / promoted_type(d); if (! robustness_verify_r(a, b, r)) { return Policy::disjoint(); } robustness_handle_meeting(a, b, sides, dx_a, dy_a, wx, wy, d, r); if (robustness_verify_disjoint_at_one_collinear(a, b, sides)) { return Policy::disjoint(); } } } if(collinear) { if (collinear_use_first) { return relate_collinear<0>(a, b); } else { // Y direction contains larger segments (maybe dx is zero) return relate_collinear<1>(a, b); } } return Policy::segments_intersect(sides, r, dx_a, dy_a, dx_b, dy_b, a, b); } private : // Ratio should lie between 0 and 1 // Also these three conditions might be of FP imprecision, the segments were actually (nearly) collinear template static inline bool robustness_verify_r( segment_type1 const& a, segment_type2 const& b, T& r) { T const zero = 0; T const one = 1; if (r < zero || r > one) { if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b)) { // Can still be disjoint (even if not one is left or right from another) // This is e.g. in case #snake4 of buffer test. return false; } //std::cout << "ROBUSTNESS: correction of r " << r << std::endl; // sides.debug(); // ROBUSTNESS: the r value can in epsilon-cases much larger than 1, while (with perfect arithmetic) // it should be one. It can be 1.14 or even 1.98049 or 2 (while still intersecting) // If segments are crossing (we can see that with the sides) // and one is inside the other, there must be an intersection point. // We correct for that. // This is (only) in case #ggl_list_20110820_christophe in unit tests // If segments are touching (two sides zero), of course they should intersect // This is (only) in case #buffer_rt_i in the unit tests) // If one touches in the middle, they also should intersect (#buffer_rt_j) // Note that even for ttmath r is occasionally > 1, e.g. 1.0000000000000000000000036191231203575 if (r > one) { r = one; } else if (r < zero) { r = zero; } } return true; } static inline void robustness_verify_collinear( segment_type1 const& a, segment_type2 const& b, bool a_is_point, bool b_is_point, side_info& sides, bool& collinear) { if ((sides.zero<0>() && ! b_is_point && ! sides.zero<1>()) || (sides.zero<1>() && ! a_is_point && ! sides.zero<0>())) { // If one of the segments is collinear, the other must be as well. // So handle it as collinear. // (In float/double epsilon margins it can easily occur that one or two of them are -1/1) // sides.debug(); sides.set<0>(0,0); sides.set<1>(0,0); collinear = true; } } static inline void robustness_verify_meeting( segment_type1 const& a, segment_type2 const& b, side_info& sides, bool& collinear, bool& collinear_use_first) { if (sides.meeting()) { // If two segments meet each other at their segment-points, two sides are zero, // the other two are not (unless collinear but we don't mean those here). // However, in near-epsilon ranges it can happen that two sides are zero // but they do not meet at their segment-points. // In that case they are nearly collinear and handled as such. if (! point_equals ( select(sides.zero_index<0>(), a), select(sides.zero_index<1>(), b) ) ) { sides.set<0>(0,0); sides.set<1>(0,0); collinear = true; if (collinear_use_first && analyse_equal<0>(a, b)) { collinear_use_first = false; } else if (! collinear_use_first && analyse_equal<1>(a, b)) { collinear_use_first = true; } } } } // Verifies and if necessary correct missed touch because of robustness // This is the case at multi_polygon_buffer unittest #rt_m static inline bool robustness_verify_same_side( segment_type1 const& a, segment_type2 const& b, side_info& sides) { int corrected = 0; if (sides.one_touching<0>()) { if (point_equals( select(sides.zero_index<0>(), a), select(0, b) )) { sides.correct_to_zero<1, 0>(); corrected = 1; } if (point_equals ( select(sides.zero_index<0>(), a), select(1, b) )) { sides.correct_to_zero<1, 1>(); corrected = 2; } } else if (sides.one_touching<1>()) { if (point_equals( select(sides.zero_index<1>(), b), select(0, a) )) { sides.correct_to_zero<0, 0>(); corrected = 3; } if (point_equals ( select(sides.zero_index<1>(), b), select(1, a) )) { sides.correct_to_zero<0, 1>(); corrected = 4; } } return corrected == 0; } static inline bool robustness_verify_disjoint_at_one_collinear( segment_type1 const& a, segment_type2 const& b, side_info const& sides) { if (sides.one_of_all_zero()) { if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b)) { return true; } } return false; } // If r is one, or zero, segments should meet and their endpoints. // Robustness issue: check if this is really the case. // It turns out to be no problem, see buffer test #rt_s1 (and there are many cases generated) // It generates an "ends in the middle" situation which is correct. template static inline void robustness_handle_meeting(segment_type1 const& a, segment_type2 const& b, side_info& sides, T const& dx_a, T const& dy_a, T const& wx, T const& wy, T const& d, R const& r) { return; T const db = geometry::detail::determinant(dx_a, dy_a, wx, wy); R const zero = 0; R const one = 1; if (math::equals(r, zero) || math::equals(r, one)) { R rb = db / d; if (rb <= 0 || rb >= 1 || math::equals(rb, 0) || math::equals(rb, 1)) { if (sides.one_zero<0>() && ! sides.one_zero<1>()) // or vice versa { #if defined(BOOST_GEOMETRY_COUNT_INTERSECTION_EQUAL) extern int g_count_intersection_equal; g_count_intersection_equal++; #endif sides.debug(); std::cout << "E r=" << r << " r.b=" << rb << " "; } } } } template static inline bool verify_disjoint(segment_type1 const& a, segment_type2 const& b) { coordinate_type a_1, a_2, b_1, b_2; bool a_swapped = false, b_swapped = false; detail::segment_arrange(a, a_1, a_2, a_swapped); detail::segment_arrange(b, b_1, b_2, b_swapped); return math::smaller(a_2, b_1) || math::larger(a_1, b_2); } template static inline typename point_type::type select(int index, Segment const& segment) { return index == 0 ? detail::get_from_index<0>(segment) : detail::get_from_index<1>(segment) ; } // We cannot use geometry::equals here. Besides that this will be changed // to compare segment-coordinate-values directly (not necessary to retrieve point first) template static inline bool point_equals(Point1 const& point1, Point2 const& point2) { return math::equals(get<0>(point1), get<0>(point2)) && math::equals(get<1>(point1), get<1>(point2)) ; } // We cannot use geometry::equals here. Besides that this will be changed // to compare segment-coordinate-values directly (not necessary to retrieve point first) template static inline bool point_equality(Point1 const& point1, Point2 const& point2, bool& equals_0, bool& equals_1) { equals_0 = math::equals(get<0>(point1), get<0>(point2)); equals_1 = math::equals(get<1>(point1), get<1>(point2)); return equals_0 && equals_1; } template static inline bool analyse_equal(segment_type1 const& a, segment_type2 const& b) { coordinate_type const a_1 = geometry::get<0, Dimension>(a); coordinate_type const a_2 = geometry::get<1, Dimension>(a); coordinate_type const b_1 = geometry::get<0, Dimension>(b); coordinate_type const b_2 = geometry::get<1, Dimension>(b); return math::equals(a_1, b_1) || math::equals(a_2, b_1) || math::equals(a_1, b_2) || math::equals(a_2, b_2) ; } template static inline return_type relate_collinear(segment_type1 const& a, segment_type2 const& b) { coordinate_type a_1, a_2, b_1, b_2; bool a_swapped = false, b_swapped = false; detail::segment_arrange(a, a_1, a_2, a_swapped); detail::segment_arrange(b, b_1, b_2, b_swapped); if (math::smaller(a_2, b_1) || math::larger(a_1, b_2)) //if (a_2 < b_1 || a_1 > b_2) { return Policy::disjoint(); } return relate_collinear(a, b, a_1, a_2, b_1, b_2, a_swapped, b_swapped); } /// Relate segments known collinear static inline return_type relate_collinear(segment_type1 const& a , segment_type2 const& b , coordinate_type a_1, coordinate_type a_2 , coordinate_type b_1, coordinate_type b_2 , bool a_swapped, bool b_swapped) { // All ca. 150 lines are about collinear rays // The intersections, if any, are always boundary points of the segments. No need to calculate anything. // However we want to find out HOW they intersect, there are many cases. // Most sources only provide the intersection (above) or that there is a collinearity (but not the points) // or some spare sources give the intersection points (calculated) but not how they align. // This source tries to give everything and still be efficient. // It is therefore (and because of the extensive clarification comments) rather long... // \see http://mpa.itc.it/radim/g50history/CMP/4.2.1-CERL-beta-libes/file475.txt // \see http://docs.codehaus.org/display/GEOTDOC/Point+Set+Theory+and+the+DE-9IM+Matrix // \see http://mathworld.wolfram.com/Line-LineIntersection.html // Because of collinearity the case is now one-dimensional and can be checked using intervals // This function is called either horizontally or vertically // We get then two intervals: // a_1-------------a_2 where a_1 < a_2 // b_1-------------b_2 where b_1 < b_2 // In all figures below a_1/a_2 denotes arranged intervals, a1-a2 or a2-a1 are still unarranged // Handle "equal", in polygon neighbourhood comparisons a common case bool const opposite = a_swapped ^ b_swapped; bool const both_swapped = a_swapped && b_swapped; // Check if segments are equal or opposite equal... bool const swapped_a1_eq_b1 = math::equals(a_1, b_1); bool const swapped_a2_eq_b2 = math::equals(a_2, b_2); if (swapped_a1_eq_b1 && swapped_a2_eq_b2) { return Policy::segment_equal(a, opposite); } bool const swapped_a2_eq_b1 = math::equals(a_2, b_1); bool const swapped_a1_eq_b2 = math::equals(a_1, b_2); bool const a1_eq_b1 = both_swapped ? swapped_a2_eq_b2 : a_swapped ? swapped_a2_eq_b1 : b_swapped ? swapped_a1_eq_b2 : swapped_a1_eq_b1; bool const a2_eq_b2 = both_swapped ? swapped_a1_eq_b1 : a_swapped ? swapped_a1_eq_b2 : b_swapped ? swapped_a2_eq_b1 : swapped_a2_eq_b2; bool const a1_eq_b2 = both_swapped ? swapped_a2_eq_b1 : a_swapped ? swapped_a2_eq_b2 : b_swapped ? swapped_a1_eq_b1 : swapped_a1_eq_b2; bool const a2_eq_b1 = both_swapped ? swapped_a1_eq_b2 : a_swapped ? swapped_a1_eq_b1 : b_swapped ? swapped_a2_eq_b2 : swapped_a2_eq_b1; // The rest below will return one or two intersections. // The delegated class can decide which is the intersection point, or two, build the Intersection Matrix (IM) // For IM it is important to know which relates to which. So this information is given, // without performance penalties to intersection calculation bool const has_common_points = swapped_a1_eq_b1 || swapped_a1_eq_b2 || swapped_a2_eq_b1 || swapped_a2_eq_b2; // "Touch" -> one intersection point -> one but not two common points // --------> A (or B) // <---------- B (or A) // a_2==b_1 (b_2==a_1 or a_2==b1) // The check a_2/b_1 is necessary because it excludes cases like // -------> // ---> // ... which are handled lateron // Corresponds to 4 cases, of which the equal points are determined above // #1: a1---->a2 b1--->b2 (a arrives at b's border) // #2: a2<----a1 b2<---b1 (b arrives at a's border) // #3: a1---->a2 b2<---b1 (both arrive at each others border) // #4: a2<----a1 b1--->b2 (no arrival at all) // Where the arranged forms have two forms: // a_1-----a_2/b_1-------b_2 or reverse (B left of A) if ((swapped_a2_eq_b1 || swapped_a1_eq_b2) && ! swapped_a1_eq_b1 && ! swapped_a2_eq_b2) { if (a2_eq_b1) return Policy::collinear_touch(get<1, 0>(a), get<1, 1>(a), 0, -1); if (a1_eq_b2) return Policy::collinear_touch(get<0, 0>(a), get<0, 1>(a), -1, 0); if (a2_eq_b2) return Policy::collinear_touch(get<1, 0>(a), get<1, 1>(a), 0, 0); if (a1_eq_b1) return Policy::collinear_touch(get<0, 0>(a), get<0, 1>(a), -1, -1); } // "Touch/within" -> there are common points and also an intersection of interiors: // Corresponds to many cases: // #1a: a1------->a2 #1b: a1-->a2 // b1--->b2 b1------->b2 // #2a: a2<-------a1 #2b: a2<--a1 // b1--->b2 b1------->b2 // #3a: a1------->a2 #3b: a1-->a2 // b2<---b1 b2<-------b1 // #4a: a2<-------a1 #4b: a2<--a1 // b2<---b1 b2<-------b1 // Note: next cases are similar and handled by the code // #4c: a1--->a2 // b1-------->b2 // #4d: a1-------->a2 // b1-->b2 // For case 1-4: a_1 < (b_1 or b_2) < a_2, two intersections are equal to segment B // For case 5-8: b_1 < (a_1 or a_2) < b_2, two intersections are equal to segment A if (has_common_points) { // Either A is in B, or B is in A, or (in case of robustness/equals) // both are true, see below bool a_in_b = (b_1 < a_1 && a_1 < b_2) || (b_1 < a_2 && a_2 < b_2); bool b_in_a = (a_1 < b_1 && b_1 < a_2) || (a_1 < b_2 && b_2 < a_2); if (a_in_b && b_in_a) { // testcase "ggl_list_20110306_javier" // In robustness it can occur that a point of A is inside B AND a point of B is inside A, // still while has_common_points is true (so one point equals the other). // If that is the case we select on length. coordinate_type const length_a = geometry::math::abs(a_1 - a_2); coordinate_type const length_b = geometry::math::abs(b_1 - b_2); if (length_a > length_b) { a_in_b = false; } else { b_in_a = false; } } int const arrival_a = a_in_b ? 1 : -1; if (a2_eq_b2) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, 0, 0, false); if (a1_eq_b2) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, arrival_a, 0, true); if (a2_eq_b1) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, 0, -arrival_a, true); if (a1_eq_b1) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, arrival_a, -arrival_a, false); } // "Inside", a completely within b or b completely within a // 2 cases: // case 1: // a_1---a_2 -> take A's points as intersection points // b_1------------b_2 // case 2: // a_1------------a_2 // b_1---b_2 -> take B's points if (a_1 > b_1 && a_2 < b_2) { // A within B return Policy::collinear_a_in_b(a, opposite); } if (b_1 > a_1 && b_2 < a_2) { // B within A return Policy::collinear_b_in_a(b, opposite); } /* Now that all cases with equal,touch,inside,disjoint, degenerate are handled the only thing left is an overlap Either a1 is between b1,b2 or a2 is between b1,b2 (a2 arrives) Next table gives an overview. The IP's are ordered following the line A1->A2 | | | a_2 in between | a_1 in between | | -----+---------------------------------+-------------------------- | a1--------->a2 | a1--------->a2 | b1----->b2 | b1----->b2 | (b1,a2), a arrives | (a1,b2), b arrives | | -----+---------------------------------+-------------------------- a sw.| a2<---------a1* | a2<---------a1* | b1----->b2 | b1----->b2 | (a1,b1), no arrival | (b2,a2), a and b arrive | | -----+---------------------------------+-------------------------- | a1--------->a2 | a1--------->a2 b sw.| b2<-----b1 | b2<-----b1 | (b2,a2), a and b arrive | (a1,b1), no arrival | | -----+---------------------------------+-------------------------- a sw.| a2<---------a1* | a2<---------a1* b sw.| b2<-----b1 | b2<-----b1 | (a1,b2), b arrives | (b1,a2), a arrives | | -----+---------------------------------+-------------------------- * Note that a_1 < a_2, and a1 <> a_1; if a is swapped, the picture might seem wrong but it (supposed to be) is right. */ if (b_1 < a_2 && a_2 < b_2) { // Left column, from bottom to top return both_swapped ? Policy::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<1, 0>(b), get<1, 1>(b), -1, 1, opposite) : b_swapped ? Policy::collinear_overlaps(get<1, 0>(b), get<1, 1>(b), get<1, 0>(a), get<1, 1>(a), 1, 1, opposite) : a_swapped ? Policy::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<0, 0>(b), get<0, 1>(b), -1, -1, opposite) : Policy::collinear_overlaps(get<0, 0>(b), get<0, 1>(b), get<1, 0>(a), get<1, 1>(a), 1, -1, opposite) ; } if (b_1 < a_1 && a_1 < b_2) { // Right column, from bottom to top return both_swapped ? Policy::collinear_overlaps(get<0, 0>(b), get<0, 1>(b), get<1, 0>(a), get<1, 1>(a), 1, -1, opposite) : b_swapped ? Policy::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<0, 0>(b), get<0, 1>(b), -1, -1, opposite) : a_swapped ? Policy::collinear_overlaps(get<1, 0>(b), get<1, 1>(b), get<1, 0>(a), get<1, 1>(a), 1, 1, opposite) : Policy::collinear_overlaps(get<0, 0>(a), get<0, 1>(a), get<1, 0>(b), get<1, 1>(b), -1, 1, opposite) ; } // Nothing should goes through. If any we have made an error // std::cout << "Robustness issue, non-logical behaviour" << std::endl; return Policy::error("Robustness issue, non-logical behaviour"); } }; }} // namespace strategy::intersection }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_INTERSECTION_HPP centroid_bashein_detmer.hpp000444000765000024 1771012161110660 31636 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_BASHEIN_DETMER_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_BASHEIN_DETMER_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { // Note: when calling the namespace "centroid", it sometimes, // somehow, in gcc, gives compilation problems (confusion with function centroid). namespace strategy { namespace centroid { /*! \brief Centroid calculation using algorith Bashein / Detmer \ingroup strategies \details Calculates centroid using triangulation method published by Bashein / Detmer \tparam Point point type of centroid to calculate \tparam PointOfSegment point type of segments, defaults to Point \par Concepts for Point and PointOfSegment: - specialized point_traits class \author Adapted from "Centroid of a Polygon" by Gerard Bashein and Paul R. Detmer, in "Graphics Gems IV", Academic Press, 1994 \par Research notes The algorithm gives the same results as Oracle and PostGIS but differs from MySQL (tried 5.0.21 / 5.0.45 / 5.0.51a / 5.1.23). Without holes: - this: POINT(4.06923363095238 1.65055803571429) - geolib: POINT(4.07254 1.66819) - MySQL: POINT(3.6636363636364 1.6272727272727)' - PostGIS: POINT(4.06923363095238 1.65055803571429) - Oracle: 4.06923363095238 1.65055803571429 - SQL Server: POINT(4.06923362245959 1.65055804168294) Statements: - \b MySQL/PostGIS: select AsText(Centroid(GeomFromText( 'POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6 ,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))'))) - \b Oracle: select sdo_geom.sdo_centroid(sdo_geometry(2003, null, null, sdo_elem_info_array(1, 1003, 1), sdo_ordinate_array( 2,1.3,2.4,1.7,2.8,1.8,3.4,1.2,3.7,1.6,3.4,2,4.1,3,5.3,2.6 ,5.4,1.2,4.9,0.8,2.9,0.7,2,1.3)) , mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005) ,mdsys.sdo_dim_element('y',0,10,.00000005))) from dual - \b SQL Server 2008: select geometry::STGeomFromText( 'POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6 ,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))',0) .STCentroid() .STAsText() With holes: - this: POINT(4.04663 1.6349) - geolib: POINT(4.04675 1.65735) - MySQL: POINT(3.6090580503834 1.607573932092) - PostGIS: POINT(4.0466265060241 1.63489959839357) - Oracle: 4.0466265060241 1.63489959839357 - SQL Server: POINT(4.0466264962959677 1.6348996057331333) Statements: - \b MySQL/PostGIS: select AsText(Centroid(GeomFromText( 'POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2 ,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3) ,(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))'))); - \b Oracle: select sdo_geom.sdo_centroid(sdo_geometry(2003, null, null , sdo_elem_info_array(1, 1003, 1, 25, 2003, 1) , sdo_ordinate_array(2,1.3,2.4,1.7,2.8,1.8,3.4,1.2,3.7,1.6,3.4, 2,4.1,3,5.3,2.6,5.4,1.2,4.9,0.8,2.9,0.7,2,1.3,4,2, 4.2,1.4, 4.8,1.9, 4.4,2.2, 4,2)) , mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005) ,mdsys.sdo_dim_element('y',0,10,.00000005))) from dual \qbk{ [heading See also] [link geometry.reference.algorithms.centroid.centroid_3_with_strategy centroid (with strategy)] } */ template < typename Point, typename PointOfSegment = Point, typename CalculationType = void > class bashein_detmer { private : // If user specified a calculation type, use that type, // whatever it is and whatever the point-type(s) are. // Else, use the most appropriate coordinate type // of the two points, but at least double typedef typename boost::mpl::if_c < boost::is_void::type::value, typename select_most_precise < typename select_coordinate_type < Point, PointOfSegment >::type, double >::type, CalculationType >::type calculation_type; /*! subclass to keep state */ class sums { friend class bashein_detmer; int count; calculation_type sum_a2; calculation_type sum_x; calculation_type sum_y; public : inline sums() : count(0) , sum_a2(calculation_type()) , sum_x(calculation_type()) , sum_y(calculation_type()) { typedef calculation_type ct; } }; public : typedef sums state_type; static inline void apply(PointOfSegment const& p1, PointOfSegment const& p2, sums& state) { /* Algorithm: For each segment: begin ai = x1 * y2 - x2 * y1; sum_a2 += ai; sum_x += ai * (x1 + x2); sum_y += ai * (y1 + y2); end return POINT(sum_x / (3 * sum_a2), sum_y / (3 * sum_a2) ) */ // Get coordinates and promote them to calculation_type calculation_type const x1 = boost::numeric_cast(get<0>(p1)); calculation_type const y1 = boost::numeric_cast(get<1>(p1)); calculation_type const x2 = boost::numeric_cast(get<0>(p2)); calculation_type const y2 = boost::numeric_cast(get<1>(p2)); calculation_type const ai = geometry::detail::determinant(p1, p2); state.count++; state.sum_a2 += ai; state.sum_x += ai * (x1 + x2); state.sum_y += ai * (y1 + y2); } static inline bool result(sums const& state, Point& centroid) { calculation_type const zero = calculation_type(); if (state.count > 0 && ! math::equals(state.sum_a2, zero)) { calculation_type const v3 = 3; calculation_type const a3 = v3 * state.sum_a2; typedef typename geometry::coordinate_type < Point >::type coordinate_type; set<0>(centroid, boost::numeric_cast(state.sum_x / a3)); set<1>(centroid, boost::numeric_cast(state.sum_y / a3)); return true; } return false; } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { // Register this strategy for rings and (multi)polygons, in two dimensions template struct default_strategy { typedef bashein_detmer < Point, typename point_type::type > type; }; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::centroid }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_BASHEIN_DETMER_HPP centroid_weighted_length.hpp000444000765000024 716412161110601 32003 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_WEIGHTED_LENGTH_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_WEIGHTED_LENGTH_HPP #include #include #include #include #include // Helper geometry #include namespace boost { namespace geometry { namespace strategy { namespace centroid { namespace detail { template struct weighted_length_sums { typedef typename geometry::model::point < Type, DimensionCount, cs::cartesian > work_point; Type length; work_point average_sum; inline weighted_length_sums() : length(Type()) { geometry::assign_zero(average_sum); } }; } template < typename Point, typename PointOfSegment = Point > class weighted_length { private : typedef typename select_most_precise < typename default_distance_result::type, typename default_distance_result::type >::type distance_type; public : typedef detail::weighted_length_sums < distance_type, geometry::dimension::type::value > state_type; static inline void apply(PointOfSegment const& p1, PointOfSegment const& p2, state_type& state) { distance_type const d = geometry::distance(p1, p2); state.length += d; typename state_type::work_point weighted_median; geometry::assign_zero(weighted_median); geometry::add_point(weighted_median, p1); geometry::add_point(weighted_median, p2); geometry::multiply_value(weighted_median, d/2); geometry::add_point(state.average_sum, weighted_median); } static inline bool result(state_type const& state, Point& centroid) { distance_type const zero = distance_type(); if (! geometry::math::equals(state.length, zero)) { assign_zero(centroid); add_point(centroid, state.average_sum); divide_value(centroid, state.length); return true; } return false; } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { // Register this strategy for linear geometries, in all dimensions template struct default_strategy < cartesian_tag, linear_tag, N, Point, Geometry > { typedef weighted_length < Point, typename point_type::type > type; }; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::centroid }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_WEIGHTED_LENGTH_HPP distance_projected_point.hpp000444000765000024 2413312161110601 32030 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include // Helper geometry (projected point on line) #include namespace boost { namespace geometry { namespace strategy { namespace distance { /*! \brief Strategy for distance point to segment \ingroup strategies \details Calculates distance using projected-point method, and (optionally) Pythagoras \author Adapted from: http://geometryalgorithms.com/Archive/algorithm_0102/algorithm_0102.htm \tparam Point \tparam_point \tparam PointOfSegment \tparam_segment_point \tparam CalculationType \tparam_calculation \tparam Strategy underlying point-point distance strategy \par Concepts for Strategy: - cartesian_distance operator(Point,Point) \note If the Strategy is a "comparable::pythagoras", this strategy automatically is a comparable projected_point strategy (so without sqrt) \qbk{ [heading See also] [link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)] } */ template < typename Point, typename PointOfSegment = Point, typename CalculationType = void, typename Strategy = pythagoras > class projected_point { public : // The three typedefs below are necessary to calculate distances // from segments defined in integer coordinates. // Integer coordinates can still result in FP distances. // There is a division, which must be represented in FP. // So promote. typedef typename promote_floating_point < typename strategy::distance::services::return_type < Strategy >::type >::type calculation_type; private : // A projected point of points in Integer coordinates must be able to be // represented in FP. typedef model::point < calculation_type, dimension::value, typename coordinate_system::type > fp_point_type; // For convenience typedef fp_point_type fp_vector_type; // We have to use a strategy using FP coordinates (fp-type) which is // not always the same as Strategy (defined as point_strategy_type) // So we create a "similar" one typedef typename strategy::distance::services::similar_type < Strategy, Point, fp_point_type >::type fp_strategy_type; public : inline calculation_type apply(Point const& p, PointOfSegment const& p1, PointOfSegment const& p2) const { assert_dimension_equal(); /* Algorithm [p1: (x1,y1), p2: (x2,y2), p: (px,py)] VECTOR v(x2 - x1, y2 - y1) VECTOR w(px - x1, py - y1) c1 = w . v c2 = v . v b = c1 / c2 RETURN POINT(x1 + b * vx, y1 + b * vy) */ // v is multiplied below with a (possibly) FP-value, so should be in FP // For consistency we define w also in FP fp_vector_type v, w; geometry::convert(p2, v); geometry::convert(p, w); subtract_point(v, p1); subtract_point(w, p1); Strategy strategy; boost::ignore_unused_variable_warning(strategy); calculation_type const zero = calculation_type(); calculation_type const c1 = dot_product(w, v); if (c1 <= zero) { return strategy.apply(p, p1); } calculation_type const c2 = dot_product(v, v); if (c2 <= c1) { return strategy.apply(p, p2); } // See above, c1 > 0 AND c2 > c1 so: c2 != 0 calculation_type const b = c1 / c2; fp_strategy_type fp_strategy = strategy::distance::services::get_similar < Strategy, Point, fp_point_type >::apply(strategy); fp_point_type projected; geometry::convert(p1, projected); multiply_value(v, b); add_point(projected, v); //std::cout << "distance " << dsv(p) << " .. " << dsv(projected) << std::endl; return fp_strategy.apply(p, projected); } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template struct tag > { typedef strategy_tag_distance_point_segment type; }; template struct return_type > { typedef typename projected_point::calculation_type type; }; template struct strategy_point_point > { typedef Strategy type; }; template < typename Point, typename PointOfSegment, typename CalculationType, typename Strategy, typename P1, typename P2 > struct similar_type, P1, P2> { typedef projected_point type; }; template < typename Point, typename PointOfSegment, typename CalculationType, typename Strategy, typename P1, typename P2 > struct get_similar, P1, P2> { static inline typename similar_type < projected_point, P1, P2 >::type apply(projected_point const& ) { return projected_point(); } }; template struct comparable_type > { // Define a projected_point strategy with its underlying point-point-strategy // being comparable typedef projected_point < Point, PointOfSegment, CalculationType, typename comparable_type::type > type; }; template struct get_comparable > { typedef typename comparable_type < projected_point >::type comparable_type; public : static inline comparable_type apply(projected_point const& ) { return comparable_type(); } }; template struct result_from_distance > { private : typedef typename return_type >::type return_type; public : template static inline return_type apply(projected_point const& , T const& value) { Strategy s; return result_from_distance::apply(s, value); } }; // Get default-strategy for point-segment distance calculation // while still have the possibility to specify point-point distance strategy (PPS) // It is used in algorithms/distance.hpp where users specify PPS for distance // of point-to-segment or point-to-linestring. // Convenient for geographic coordinate systems especially. template struct default_strategy { typedef strategy::distance::projected_point < Point, PointOfSegment, void, typename boost::mpl::if_ < boost::is_void, typename default_strategy < point_tag, Point, PointOfSegment, cartesian_tag, cartesian_tag >::type, Strategy >::type > type; }; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::distance }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_HPP distance_pythagoras.hpp000444000765000024 2247212161110660 31032 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace distance { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct compute_pythagoras { static inline T apply(Point1 const& p1, Point2 const& p2) { T const c1 = boost::numeric_cast(get(p1)); T const c2 = boost::numeric_cast(get(p2)); T const d = c1 - c2; return d * d + compute_pythagoras::apply(p1, p2); } }; template struct compute_pythagoras { static inline T apply(Point1 const&, Point2 const&) { return boost::numeric_cast(0); } }; } #endif // DOXYGEN_NO_DETAIL namespace comparable { /*! \brief Strategy to calculate comparable distance between two points \ingroup strategies \tparam Point1 \tparam_first_point \tparam Point2 \tparam_second_point \tparam CalculationType \tparam_calculation */ template < typename Point1, typename Point2 = Point1, typename CalculationType = void > class pythagoras { public : typedef typename util::calculation_type::geometric::binary < Point1, Point2, CalculationType >::type calculation_type; static inline calculation_type apply(Point1 const& p1, Point2 const& p2) { BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); // Calculate distance using Pythagoras // (Leave comment above for Doxygen) assert_dimension_equal(); return detail::compute_pythagoras < Point1, Point2, dimension::value, calculation_type >::apply(p1, p2); } }; } // namespace comparable /*! \brief Strategy to calculate the distance between two points \ingroup strategies \tparam Point1 \tparam_first_point \tparam Point2 \tparam_second_point \tparam CalculationType \tparam_calculation \qbk{ [heading Notes] [note Can be used for points with two\, three or more dimensions] [heading See also] [link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)] } */ template < typename Point1, typename Point2 = Point1, typename CalculationType = void > class pythagoras { typedef comparable::pythagoras comparable_type; public : typedef typename util::calculation_type::geometric::binary < Point1, Point2, CalculationType, double, double // promote integer to double >::type calculation_type; /*! \brief applies the distance calculation using pythagoras \return the calculated distance (including taking the square root) \param p1 first point \param p2 second point */ static inline calculation_type apply(Point1 const& p1, Point2 const& p2) { calculation_type const t = comparable_type::apply(p1, p2); return sqrt(t); } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template struct tag > { typedef strategy_tag_distance_point_point type; }; template struct return_type > { typedef typename pythagoras::calculation_type type; }; template < typename Point1, typename Point2, typename CalculationType, typename P1, typename P2 > struct similar_type, P1, P2> { typedef pythagoras type; }; template < typename Point1, typename Point2, typename CalculationType, typename P1, typename P2 > struct get_similar, P1, P2> { static inline typename similar_type < pythagoras, P1, P2 >::type apply(pythagoras const& ) { return pythagoras(); } }; template struct comparable_type > { typedef comparable::pythagoras type; }; template struct get_comparable > { typedef comparable::pythagoras comparable_type; public : static inline comparable_type apply(pythagoras const& ) { return comparable_type(); } }; template struct result_from_distance > { private : typedef typename return_type >::type return_type; public : template static inline return_type apply(pythagoras const& , T const& value) { return return_type(value); } }; // Specializations for comparable::pythagoras template struct tag > { typedef strategy_tag_distance_point_point type; }; template struct return_type > { typedef typename comparable::pythagoras::calculation_type type; }; template < typename Point1, typename Point2, typename CalculationType, typename P1, typename P2 > struct similar_type, P1, P2> { typedef comparable::pythagoras type; }; template < typename Point1, typename Point2, typename CalculationType, typename P1, typename P2 > struct get_similar, P1, P2> { static inline typename similar_type < comparable::pythagoras, P1, P2 >::type apply(comparable::pythagoras const& ) { return comparable::pythagoras(); } }; template struct comparable_type > { typedef comparable::pythagoras type; }; template struct get_comparable > { typedef comparable::pythagoras comparable_type; public : static inline comparable_type apply(comparable::pythagoras const& ) { return comparable_type(); } }; template struct result_from_distance > { private : typedef typename return_type >::type return_type; public : template static inline return_type apply(comparable::pythagoras const& , T const& value) { return_type const v = value; return v * v; } }; template struct default_strategy { typedef pythagoras type; }; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::distance }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_HPP point_in_box.hpp000444000765000024 763212161110614 27446 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace within { struct within_range { template static inline bool apply(Value1 const& value, Value2 const& min_value, Value2 const& max_value) { return value > min_value && value < max_value; } }; struct covered_by_range { template static inline bool apply(Value1 const& value, Value2 const& min_value, Value2 const& max_value) { return value >= min_value && value <= max_value; } }; template < typename SubStrategy, typename Point, typename Box, std::size_t Dimension, std::size_t DimensionCount > struct relate_point_box_loop { static inline bool apply(Point const& point, Box const& box) { if (! SubStrategy::apply(get(point), get(box), get(box)) ) { return false; } return relate_point_box_loop < SubStrategy, Point, Box, Dimension + 1, DimensionCount >::apply(point, box); } }; template < typename SubStrategy, typename Point, typename Box, std::size_t DimensionCount > struct relate_point_box_loop { static inline bool apply(Point const& , Box const& ) { return true; } }; template < typename Point, typename Box, typename SubStrategy = within_range > struct point_in_box { static inline bool apply(Point const& point, Box const& box) { return relate_point_box_loop < SubStrategy, Point, Box, 0, dimension::type::value >::apply(point, box); } }; } // namespace within #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace within { namespace services { template struct default_strategy < point_tag, box_tag, point_tag, areal_tag, cartesian_tag, cartesian_tag, Point, Box > { typedef within::point_in_box type; }; }} // namespace within::services namespace covered_by { namespace services { template struct default_strategy < point_tag, box_tag, point_tag, areal_tag, cartesian_tag, cartesian_tag, Point, Box > { typedef within::point_in_box < Point, Box, within::covered_by_range > type; }; }} // namespace covered_by::services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }}} // namespace boost::geometry::strategy #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP point_in_poly_crossings_multiply.hpp000444000765000024 637312161110674 33701 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_CROSSINGS_MULTIPLY_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_CROSSINGS_MULTIPLY_HPP #include #include namespace boost { namespace geometry { namespace strategy { namespace within { /*! \brief Within detection using cross counting, \ingroup strategies \tparam Point \tparam_point \tparam PointOfSegment \tparam_segment_point \tparam CalculationType \tparam_calculation \see http://tog.acm.org/resources/GraphicsGems/gemsiv/ptpoly_haines/ptinpoly.c \note Does NOT work correctly for point ON border \qbk{ [heading See also] [link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)] } */ template < typename Point, typename PointOfSegment = Point, typename CalculationType = void > class crossings_multiply { typedef typename select_calculation_type < Point, PointOfSegment, CalculationType >::type calculation_type; class flags { bool inside_flag; bool first; bool yflag0; public : friend class crossings_multiply; inline flags() : inside_flag(false) , first(true) , yflag0(false) {} }; public : typedef Point point_type; typedef PointOfSegment segment_point_type; typedef flags state_type; static inline bool apply(Point const& point, PointOfSegment const& seg1, PointOfSegment const& seg2, flags& state) { calculation_type const tx = get<0>(point); calculation_type const ty = get<1>(point); calculation_type const x0 = get<0>(seg1); calculation_type const y0 = get<1>(seg1); calculation_type const x1 = get<0>(seg2); calculation_type const y1 = get<1>(seg2); if (state.first) { state.first = false; state.yflag0 = y0 >= ty; } bool yflag1 = y1 >= ty; if (state.yflag0 != yflag1) { if ( ((y1-ty) * (x0-x1) >= (x1-tx) * (y0-y1)) == yflag1 ) { state.inside_flag = ! state.inside_flag; } } state.yflag0 = yflag1; return true; } static inline int result(flags const& state) { return state.inside_flag ? 1 : -1; } }; }} // namespace strategy::within }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_CROSSINGS_MULTIPLY_HPP point_in_poly_franklin.hpp000444000765000024 623412161110600 31515 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP #include #include namespace boost { namespace geometry { namespace strategy { namespace within { /*! \brief Within detection using cross counting \ingroup strategies \tparam Point \tparam_point \tparam PointOfSegment \tparam_segment_point \tparam CalculationType \tparam_calculation \author adapted from Randolph Franklin algorithm \author Barend and Maarten, 1995 \author Revised for templatized library, Barend Gehrels, 2007 \return true if point is in ring, works for closed rings in both directions \note Does NOT work correctly for point ON border \qbk{ [heading See also] [link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)] } */ template < typename Point, typename PointOfSegment = Point, typename CalculationType = void > class franklin { typedef typename select_calculation_type < Point, PointOfSegment, CalculationType >::type calculation_type; /*! subclass to keep state */ class crossings { bool crosses; public : friend class franklin; inline crossings() : crosses(false) {} }; public : typedef Point point_type; typedef PointOfSegment segment_point_type; typedef crossings state_type; static inline bool apply(Point const& point, PointOfSegment const& seg1, PointOfSegment const& seg2, crossings& state) { calculation_type const& px = get<0>(point); calculation_type const& py = get<1>(point); calculation_type const& x1 = get<0>(seg1); calculation_type const& y1 = get<1>(seg1); calculation_type const& x2 = get<0>(seg2); calculation_type const& y2 = get<1>(seg2); if ( ( (y2 <= py && py < y1) || (y1 <= py && py < y2) ) && (px < (x1 - x2) * (py - y2) / (y1 - y2) + x2) ) { state.crosses = ! state.crosses; } return true; } static inline int result(crossings const& state) { return state.crosses ? 1 : -1; } }; }} // namespace strategy::within }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP side_by_triangle.hpp000444000765000024 731412161110604 30256 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/cartesian// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_BY_TRIANGLE_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_BY_TRIANGLE_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace side { /*! \brief Check at which side of a segment a point lies: left of segment (> 0), right of segment (< 0), on segment (0) \ingroup strategies \tparam CalculationType \tparam_calculation */ template class side_by_triangle { public : // Template member function, because it is not always trivial // or convenient to explicitly mention the typenames in the // strategy-struct itself. // Types can be all three different. Therefore it is // not implemented (anymore) as "segment" template static inline int apply(P1 const& p1, P2 const& p2, P const& p) { typedef typename boost::mpl::if_c < boost::is_void::type::value, typename select_most_precise < typename select_most_precise < typename coordinate_type::type, typename coordinate_type::type >::type, typename coordinate_type

::type >::type, CalculationType >::type coordinate_type; coordinate_type const x = get<0>(p); coordinate_type const y = get<1>(p); coordinate_type const sx1 = get<0>(p1); coordinate_type const sy1 = get<1>(p1); coordinate_type const sx2 = get<0>(p2); coordinate_type const sy2 = get<1>(p2); // Promote float->double, small int->int typedef typename select_most_precise < coordinate_type, double >::type promoted_type; promoted_type const dx = sx2 - sx1; promoted_type const dy = sy2 - sy1; promoted_type const dpx = x - sx1; promoted_type const dpy = y - sy1; promoted_type const s = geometry::detail::determinant ( dx, dy, dpx, dpy ); promoted_type const zero = promoted_type(); return math::equals(s, zero) ? 0 : s > zero ? 1 : -1; } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template struct default_strategy { typedef side_by_triangle type; }; } #endif }} // namespace strategy::side }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_BY_TRIANGLE_HPP concepts000755000765000024 012161110700 23742 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategiesarea_concept.hpp000444000765000024 405012161110645 27242 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CONCEPTS_AREA_CONCEPT_HPP #define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_AREA_CONCEPT_HPP #include namespace boost { namespace geometry { namespace concept { /*! \brief Checks strategy for area \ingroup area */ template class AreaStrategy { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS // 1) must define state_type, typedef typename Strategy::state_type state_type; // 2) must define return_type, typedef typename Strategy::return_type return_type; // 3) must define point_type, of polygon (segments) typedef typename Strategy::segment_point_type spoint_type; struct check_methods { static void apply() { Strategy const* str = 0; state_type *st = 0; // 4) must implement a method apply with the following signature spoint_type const* sp = 0; str->apply(*sp, *sp, *st); // 5) must implement a static method result with the following signature return_type r = str->result(*st); boost::ignore_unused_variable_warning(r); boost::ignore_unused_variable_warning(str); } }; public : BOOST_CONCEPT_USAGE(AreaStrategy) { check_methods::apply(); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_AREA_CONCEPT_HPP centroid_concept.hpp000444000765000024 416712161110622 30145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CENTROID_CONCEPT_HPP #define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CENTROID_CONCEPT_HPP #include namespace boost { namespace geometry { namespace concept { /*! \brief Checks strategy for centroid \ingroup centroid */ template class CentroidStrategy { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS // 1) must define state_type, typedef typename Strategy::state_type state_type; // 2) must define point_type, typedef typename Strategy::point_type point_type; // 3) must define point_type, of polygon (segments) typedef typename Strategy::segment_point_type spoint_type; struct check_methods { static void apply() { Strategy *str = 0; state_type *st = 0; // 4) must implement a static method apply, // getting two segment-points spoint_type const* sp = 0; str->apply(*sp, *sp, *st); // 5) must implement a static method result // getting the centroid point_type *c = 0; bool r = str->result(*st, *c); boost::ignore_unused_variable_warning(str); boost::ignore_unused_variable_warning(r); } }; public : BOOST_CONCEPT_USAGE(CentroidStrategy) { check_methods::apply(); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CENTROID_CONCEPT_HPP convex_hull_concept.hpp000444000765000024 376012161110635 30666 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CONVEX_HULL_CONCEPT_HPP #define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CONVEX_HULL_CONCEPT_HPP #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Checks strategy for convex_hull \ingroup convex_hull */ template class ConvexHullStrategy { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS // 1) must define state_type typedef typename Strategy::state_type state_type; // 2) must define point_type typedef typename Strategy::point_type point_type; // 3) must define geometry_type typedef typename Strategy::geometry_type geometry_type; struct check_methods { static void apply() { Strategy const* str; state_type* st; geometry_type* sp; std::vector *v; // 4) must implement a method apply, iterating over a range str->apply(*sp, *st); // 5) must implement a method result, with an output iterator str->result(*st, std::back_inserter(*v), true); } }; public : BOOST_CONCEPT_USAGE(ConvexHullStrategy) { check_methods::apply(); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CONVEX_HULL_CONCEPT_HPP distance_concept.hpp000444000765000024 1367112161110700 30145 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CONCEPTS_DISTANCE_CONCEPT_HPP #define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_DISTANCE_CONCEPT_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Checks strategy for point-segment-distance \ingroup distance */ template struct PointDistanceStrategy { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS private : struct checker { template static void apply(ApplyMethod const&) { // 1: inspect and define both arguments of apply typedef typename parameter_type_of < ApplyMethod, 0 >::type ptype1; typedef typename parameter_type_of < ApplyMethod, 1 >::type ptype2; // 2) check if apply-arguments fulfill point concept BOOST_CONCEPT_ASSERT ( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT ( (concept::ConstPoint) ); // 3) must define meta-function return_type typedef typename strategy::distance::services::return_type::type rtype; // 4) must define meta-function "similar_type" typedef typename strategy::distance::services::similar_type < Strategy, ptype2, ptype1 >::type stype; // 5) must define meta-function "comparable_type" typedef typename strategy::distance::services::comparable_type < Strategy >::type ctype; // 6) must define meta-function "tag" typedef typename strategy::distance::services::tag < Strategy >::type tag; // 7) must implement apply with arguments Strategy* str = 0; ptype1 *p1 = 0; ptype2 *p2 = 0; rtype r = str->apply(*p1, *p2); // 8) must define (meta)struct "get_similar" with apply stype s = strategy::distance::services::get_similar < Strategy, ptype2, ptype1 >::apply(*str); // 9) must define (meta)struct "get_comparable" with apply ctype c = strategy::distance::services::get_comparable < Strategy >::apply(*str); // 10) must define (meta)struct "result_from_distance" with apply r = strategy::distance::services::result_from_distance < Strategy >::apply(*str, 1.0); boost::ignore_unused_variable_warning(str); boost::ignore_unused_variable_warning(s); boost::ignore_unused_variable_warning(c); boost::ignore_unused_variable_warning(r); } }; public : BOOST_CONCEPT_USAGE(PointDistanceStrategy) { checker::apply(&Strategy::apply); } #endif }; /*! \brief Checks strategy for point-segment-distance \ingroup strategy_concepts */ template struct PointSegmentDistanceStrategy { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS private : struct checker { template static void apply(ApplyMethod const&) { typedef typename parameter_type_of < ApplyMethod, 0 >::type ptype; typedef typename parameter_type_of < ApplyMethod, 1 >::type sptype; // 2) check if apply-arguments fulfill point concept BOOST_CONCEPT_ASSERT ( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT ( (concept::ConstPoint) ); // 3) must define meta-function return_type typedef typename strategy::distance::services::return_type::type rtype; // 4) must define underlying point-distance-strategy typedef typename strategy::distance::services::strategy_point_point::type stype; BOOST_CONCEPT_ASSERT ( (concept::PointDistanceStrategy) ); Strategy *str = 0; ptype *p = 0; sptype *sp1 = 0; sptype *sp2 = 0; rtype r = str->apply(*p, *sp1, *sp2); boost::ignore_unused_variable_warning(str); boost::ignore_unused_variable_warning(r); } }; public : BOOST_CONCEPT_USAGE(PointSegmentDistanceStrategy) { checker::apply(&Strategy::apply); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_DISTANCE_CONCEPT_HPP segment_intersect_concept.hpp000444000765000024 411012161110606 32046 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SEGMENT_INTERSECT_CONCEPT_HPP #define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SEGMENT_INTERSECT_CONCEPT_HPP //NOT FINISHED! #include namespace boost { namespace geometry { namespace concept { /*! \brief Checks strategy for segment intersection \ingroup segment_intersection */ template class SegmentIntersectStrategy { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS // 1) must define return_type typedef typename Strategy::return_type return_type; // 2) must define point_type (of segment points) //typedef typename Strategy::point_type point_type; // 3) must define segment_type 1 and 2 (of segment points) typedef typename Strategy::segment_type1 segment_type1; typedef typename Strategy::segment_type2 segment_type2; struct check_methods { static void apply() { Strategy const* str; return_type* rt; //point_type const* p; segment_type1 const* s1; segment_type2 const* s2; // 4) must implement a method apply // having two segments *rt = str->apply(*s1, *s2); } }; public : BOOST_CONCEPT_USAGE(SegmentIntersectStrategy) { check_methods::apply(); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SEGMENT_INTERSECT_CONCEPT_HPP simplify_concept.hpp000444000765000024 617612161110601 30171 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SIMPLIFY_CONCEPT_HPP #define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SIMPLIFY_CONCEPT_HPP #include #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Checks strategy for simplify \ingroup simplify */ template struct SimplifyStrategy { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS private : // 1) must define distance_strategy_type, // defining point-segment distance strategy (to be checked) typedef typename Strategy::distance_strategy_type ds_type; struct checker { template static void apply(ApplyMethod const&) { namespace ft = boost::function_types; typedef typename ft::parameter_types < ApplyMethod >::type parameter_types; typedef typename boost::mpl::if_ < ft::is_member_function_pointer, boost::mpl::int_<1>, boost::mpl::int_<0> >::type base_index; // 1: inspect and define both arguments of apply typedef typename boost::remove_const < typename boost::remove_reference < typename boost::mpl::at < parameter_types, base_index >::type >::type >::type point_type; BOOST_CONCEPT_ASSERT ( (concept::PointSegmentDistanceStrategy) ); Strategy *str = 0; std::vector const* v1 = 0; std::vector * v2 = 0; // 2) must implement method apply with arguments // - Range // - OutputIterator // - floating point value str->apply(*v1, std::back_inserter(*v2), 1.0); boost::ignore_unused_variable_warning(str); } }; public : BOOST_CONCEPT_USAGE(SimplifyStrategy) { checker::apply(&ds_type::apply); } #endif }; }}} // namespace boost::geometry::concept #endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SIMPLIFY_CONCEPT_HPP within_concept.hpp000444000765000024 1772512161110700 27661 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/concepts// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CONCEPTS_WITHIN_CONCEPT_HPP #define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_WITHIN_CONCEPT_HPP #include #include #include namespace boost { namespace geometry { namespace concept { /*! \brief Checks strategy for within (point-in-polygon) \ingroup within */ template class WithinStrategyPolygonal { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS // 1) must define state_type typedef typename Strategy::state_type state_type; struct checker { template static void apply(ApplyMethod const&, ResultMethod const& ) { typedef typename parameter_type_of < ApplyMethod, 0 >::type point_type; typedef typename parameter_type_of < ApplyMethod, 1 >::type segment_point_type; // CHECK: apply-arguments should both fulfill point concept BOOST_CONCEPT_ASSERT ( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT ( (concept::ConstPoint) ); // CHECK: return types (result: int, apply: bool) BOOST_MPL_ASSERT_MSG ( (boost::is_same < bool, typename boost::function_types::result_type::type >::type::value), WRONG_RETURN_TYPE_OF_APPLY , (bool) ); BOOST_MPL_ASSERT_MSG ( (boost::is_same < int, typename boost::function_types::result_type::type >::type::value), WRONG_RETURN_TYPE_OF_RESULT , (int) ); // CHECK: calling method apply and result Strategy const* str = 0; state_type* st = 0; point_type const* p = 0; segment_point_type const* sp = 0; bool b = str->apply(*p, *sp, *sp, *st); int r = str->result(*st); boost::ignore_unused_variable_warning(r); boost::ignore_unused_variable_warning(b); boost::ignore_unused_variable_warning(str); } }; public : BOOST_CONCEPT_USAGE(WithinStrategyPolygonal) { checker::apply(&Strategy::apply, &Strategy::result); } #endif }; template class WithinStrategyPointBox { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS struct checker { template static void apply(ApplyMethod const&) { typedef typename parameter_type_of < ApplyMethod, 0 >::type point_type; typedef typename parameter_type_of < ApplyMethod, 1 >::type box_type; // CHECK: apply-arguments should fulfill point/box concept BOOST_CONCEPT_ASSERT ( (concept::ConstPoint) ); BOOST_CONCEPT_ASSERT ( (concept::ConstBox) ); // CHECK: return types (apply: bool) BOOST_MPL_ASSERT_MSG ( (boost::is_same < bool, typename boost::function_types::result_type::type >::type::value), WRONG_RETURN_TYPE , (bool) ); // CHECK: calling method apply Strategy const* str = 0; point_type const* p = 0; box_type const* bx = 0; bool b = str->apply(*p, *bx); boost::ignore_unused_variable_warning(b); boost::ignore_unused_variable_warning(str); } }; public : BOOST_CONCEPT_USAGE(WithinStrategyPointBox) { checker::apply(&Strategy::apply); } #endif }; template class WithinStrategyBoxBox { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS struct checker { template static void apply(ApplyMethod const&) { typedef typename parameter_type_of < ApplyMethod, 0 >::type box_type1; typedef typename parameter_type_of < ApplyMethod, 1 >::type box_type2; // CHECK: apply-arguments should both fulfill box concept BOOST_CONCEPT_ASSERT ( (concept::ConstBox) ); BOOST_CONCEPT_ASSERT ( (concept::ConstBox) ); // CHECK: return types (apply: bool) BOOST_MPL_ASSERT_MSG ( (boost::is_same < bool, typename boost::function_types::result_type::type >::type::value), WRONG_RETURN_TYPE , (bool) ); // CHECK: calling method apply Strategy const* str = 0; box_type1 const* b1 = 0; box_type2 const* b2 = 0; bool b = str->apply(*b1, *b2); boost::ignore_unused_variable_warning(b); boost::ignore_unused_variable_warning(str); } }; public : BOOST_CONCEPT_USAGE(WithinStrategyBoxBox) { checker::apply(&Strategy::apply); } #endif }; // So now: boost::geometry::concept::within namespace within { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct check_within {}; template struct check_within { BOOST_CONCEPT_ASSERT( (WithinStrategyPolygonal) ); }; template struct check_within { BOOST_CONCEPT_ASSERT( (WithinStrategyPointBox) ); }; template struct check_within { BOOST_CONCEPT_ASSERT( (WithinStrategyBoxBox) ); }; } // namespace dispatch #endif /*! \brief Checks, in compile-time, the concept of any within-strategy \ingroup concepts */ template inline void check() { dispatch::check_within c; boost::ignore_unused_variable_warning(c); } }}}} // namespace boost::geometry::concept::within #endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_WITHIN_CONCEPT_HPP spherical000755000765000024 012161110702 24100 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategiesarea_huiller.hpp000444000765000024 1415612161110702 27431 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/spherical// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AREA_HUILLER_HPP #define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AREA_HUILLER_HPP #include #include #include namespace boost { namespace geometry { namespace strategy { namespace area { /*! \brief Area calculation by spherical excess / Huiller's formula \ingroup strategies \tparam PointOfSegment point type of segments of rings/polygons \tparam CalculationType \tparam_calculation \author Barend Gehrels. Adapted from: - http://www.soe.ucsc.edu/~pang/160/f98/Gems/GemsIV/sph_poly.c - http://williams.best.vwh.net/avform.htm \note The version in Gems didn't account for polygons crossing the 180 meridian. \note This version works for convex and non-convex polygons, for 180 meridian crossing polygons and for polygons with holes. However, some cases (especially 180 meridian cases) must still be checked. \note The version which sums angles, which is often seen, doesn't handle non-convex polygons correctly. \note The version which sums longitudes, see http://trs-new.jpl.nasa.gov/dspace/bitstream/2014/40409/1/07-03.pdf, is simple and works well in most cases but not in 180 meridian crossing cases. This probably could be solved. \note This version is made for spherical equatorial coordinate systems \qbk{ [heading Example] [area_with_strategy] [area_with_strategy_output] [heading See also] [link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)] } */ template < typename PointOfSegment, typename CalculationType = void > class huiller { typedef typename boost::mpl::if_c < boost::is_void::type::value, typename select_most_precise < typename coordinate_type::type, double >::type, CalculationType >::type calculation_type; protected : struct excess_sum { calculation_type sum; // Distances are calculated on unit sphere here strategy::distance::haversine distance_over_unit_sphere; inline excess_sum() : sum(0) , distance_over_unit_sphere(1) {} inline calculation_type area(calculation_type radius) const { return - sum * radius * radius; } }; public : typedef calculation_type return_type; typedef PointOfSegment segment_point_type; typedef excess_sum state_type; inline huiller(calculation_type radius = 1.0) : m_radius(radius) {} inline void apply(PointOfSegment const& p1, PointOfSegment const& p2, excess_sum& state) const { if (! geometry::math::equals(get<0>(p1), get<0>(p2))) { calculation_type const half = 0.5; calculation_type const two = 2.0; calculation_type const four = 4.0; calculation_type const two_pi = two * geometry::math::pi(); calculation_type const half_pi = half * geometry::math::pi(); // Distance p1 p2 calculation_type a = state.distance_over_unit_sphere.apply(p1, p2); // Sides on unit sphere to south pole calculation_type b = half_pi - geometry::get_as_radian<1>(p2); calculation_type c = half_pi - geometry::get_as_radian<1>(p1); // Semi parameter calculation_type s = half * (a + b + c); // E: spherical excess, using l'Huiller's formula // [tg(e / 4)]2 = tg[s / 2] tg[(s-a) / 2] tg[(s-b) / 2] tg[(s-c) / 2] calculation_type E = four * atan(sqrt(geometry::math::abs(tan(s / two) * tan((s - a) / two) * tan((s - b) / two) * tan((s - c) / two)))); E = geometry::math::abs(E); // In right direction: positive, add area. In left direction: negative, subtract area. // Longitude comparisons are not so obvious. If one is negative, other is positive, // we have to take the dateline into account. // TODO: check this / enhance this, should be more robust. See also the "grow" for ll // TODO: use minmax or "smaller"/"compare" strategy for this calculation_type lon1 = geometry::get_as_radian<0>(p1) < 0 ? geometry::get_as_radian<0>(p1) + two_pi : geometry::get_as_radian<0>(p1); calculation_type lon2 = geometry::get_as_radian<0>(p2) < 0 ? geometry::get_as_radian<0>(p2) + two_pi : geometry::get_as_radian<0>(p2); if (lon2 < lon1) { E = -E; } state.sum += E; } } inline return_type result(excess_sum const& state) const { return state.area(m_radius); } private : /// Radius of the sphere calculation_type m_radius; }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template struct default_strategy { typedef strategy::area::huiller type; }; // Note: spherical polar coordinate system requires "get_as_radian_equatorial" /***template struct default_strategy { typedef strategy::area::huiller type; };***/ } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::area }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AREA_HUILLER_HPP compare_circular.hpp000444000765000024 1005312161110645 30305 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/spherical// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_SPHERICAL_COMPARE_SPHERICAL_HPP #define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_COMPARE_SPHERICAL_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace compare { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct shift { }; template <> struct shift { static inline double full() { return 360.0; } static inline double half() { return 180.0; } }; template <> struct shift { static inline double full() { return 2.0 * boost::math::constants::pi(); } static inline double half() { return boost::math::constants::pi(); } }; } // namespace detail #endif /*! \brief Compare (in one direction) strategy for spherical coordinates \ingroup strategies \tparam Point point-type \tparam Dimension dimension */ template struct circular_comparator { static inline CoordinateType put_in_range(CoordinateType const& c, double min_border, double max_border) { CoordinateType value = c; while (value < min_border) { value += detail::shift::full(); } while (value > max_border) { value -= detail::shift::full(); } return value; } inline bool operator()(CoordinateType const& c1, CoordinateType const& c2) const { Compare compare; // Check situation that one of them is e.g. std::numeric_limits. static const double full = detail::shift::full(); double mx = 10.0 * full; if (c1 < -mx || c1 > mx || c2 < -mx || c2 > mx) { // do normal comparison, using circular is not useful return compare(c1, c2); } static const double half = full / 2.0; CoordinateType v1 = put_in_range(c1, -half, half); CoordinateType v2 = put_in_range(c2, -half, half); // Two coordinates on a circle are // at max <= half a circle away from each other. // So if it is more, shift origin. CoordinateType diff = geometry::math::abs(v1 - v2); if (diff > half) { v1 = put_in_range(v1, 0, full); v2 = put_in_range(v2, 0, full); } return compare(v1, v2); } }; }} // namespace strategy::compare #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS // Specialize for the longitude (dim 0) template < typename Point, template class CoordinateSystem, typename Units > struct strategy_compare, 0> { typedef typename coordinate_type::type coordinate_type; typedef strategy::compare::circular_comparator < coordinate_type, Units, std::less > type; }; template < typename Point, template class CoordinateSystem, typename Units > struct strategy_compare, 0> { typedef typename coordinate_type::type coordinate_type; typedef strategy::compare::circular_comparator < coordinate_type, Units, std::greater > type; }; #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_COMPARE_SPHERICAL_HPP distance_cross_track.hpp000444000765000024 2615712161110644 31175 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/spherical// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_HPP #define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_HPP #include #include #include #include #include #include #include #include #include #include #ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK # include #endif namespace boost { namespace geometry { namespace strategy { namespace distance { /*! \brief Strategy functor for distance point to segment calculation \ingroup strategies \details Class which calculates the distance of a point to a segment, using latlong points \see http://williams.best.vwh.net/avform.htm \tparam Point point type \tparam PointOfSegment \tparam_segment_point \tparam CalculationType \tparam_calculation \tparam Strategy underlying point-point distance strategy, defaults to haversine \qbk{ [heading See also] [link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)] } */ template < typename Point, typename PointOfSegment = Point, typename CalculationType = void, typename Strategy = typename services::default_strategy::type > class cross_track { public : typedef typename promote_floating_point < typename select_calculation_type < Point, PointOfSegment, CalculationType >::type >::type return_type; inline cross_track() { m_strategy = Strategy(); m_radius = m_strategy.radius(); } inline cross_track(return_type const& r) : m_radius(r) , m_strategy(r) {} inline cross_track(Strategy const& s) : m_strategy(s) { m_radius = m_strategy.radius(); } // It might be useful in the future // to overload constructor with strategy info. // crosstrack(...) {} inline return_type apply(Point const& p, PointOfSegment const& sp1, PointOfSegment const& sp2) const { // http://williams.best.vwh.net/avform.htm#XTE return_type d1 = m_strategy.apply(sp1, p); return_type d3 = m_strategy.apply(sp1, sp2); if (geometry::math::equals(d3, 0.0)) { // "Degenerate" segment, return either d1 or d2 return d1; } return_type d2 = m_strategy.apply(sp2, p); return_type crs_AD = course(sp1, p); return_type crs_AB = course(sp1, sp2); return_type crs_BA = crs_AB - geometry::math::pi(); return_type crs_BD = course(sp2, p); return_type d_crs1 = crs_AD - crs_AB; return_type d_crs2 = crs_BD - crs_BA; // d1, d2, d3 are in principle not needed, only the sign matters return_type projection1 = cos( d_crs1 ) * d1 / d3; return_type projection2 = cos( d_crs2 ) * d2 / d3; #ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK std::cout << "Course " << dsv(sp1) << " to " << dsv(p) << " " << crs_AD * geometry::math::r2d << std::endl; std::cout << "Course " << dsv(sp1) << " to " << dsv(sp2) << " " << crs_AB * geometry::math::r2d << std::endl; std::cout << "Course " << dsv(sp2) << " to " << dsv(p) << " " << crs_BD * geometry::math::r2d << std::endl; std::cout << "Projection AD-AB " << projection1 << " : " << d_crs1 * geometry::math::r2d << std::endl; std::cout << "Projection BD-BA " << projection2 << " : " << d_crs2 * geometry::math::r2d << std::endl; #endif if(projection1 > 0.0 && projection2 > 0.0) { return_type XTD = m_radius * geometry::math::abs( asin( sin( d1 / m_radius ) * sin( d_crs1 ) )); #ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK std::cout << "Projection ON the segment" << std::endl; std::cout << "XTD: " << XTD << " d1: " << d1 << " d2: " << d2 << std::endl; #endif // Return shortest distance, projected point on segment sp1-sp2 return return_type(XTD); } else { #ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK std::cout << "Projection OUTSIDE the segment" << std::endl; #endif // Return shortest distance, project either on point sp1 or sp2 return return_type( (std::min)( d1 , d2 ) ); } } inline return_type radius() const { return m_radius; } private : BOOST_CONCEPT_ASSERT ( (geometry::concept::PointDistanceStrategy) ); return_type m_radius; // Point-point distances are calculated in radians, on the unit sphere Strategy m_strategy; /// Calculate course (bearing) between two points. Might be moved to a "course formula" ... inline return_type course(Point const& p1, Point const& p2) const { // http://williams.best.vwh.net/avform.htm#Crs return_type dlon = get_as_radian<0>(p2) - get_as_radian<0>(p1); return_type cos_p2lat = cos(get_as_radian<1>(p2)); // "An alternative formula, not requiring the pre-computation of d" return atan2(sin(dlon) * cos_p2lat, cos(get_as_radian<1>(p1)) * sin(get_as_radian<1>(p2)) - sin(get_as_radian<1>(p1)) * cos_p2lat * cos(dlon)); } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template struct tag > { typedef strategy_tag_distance_point_segment type; }; template struct return_type > { typedef typename cross_track::return_type type; }; template < typename Point, typename PointOfSegment, typename CalculationType, typename Strategy, typename P, typename PS > struct similar_type, P, PS> { typedef cross_track type; }; template < typename Point, typename PointOfSegment, typename CalculationType, typename Strategy, typename P, typename PS > struct get_similar, P, PS> { static inline typename similar_type < cross_track, P, PS >::type apply(cross_track const& strategy) { return cross_track(strategy.radius()); } }; template struct comparable_type > { // Comparable type is here just the strategy typedef typename similar_type < cross_track < Point, PointOfSegment, CalculationType, Strategy >, Point, PointOfSegment >::type type; }; template < typename Point, typename PointOfSegment, typename CalculationType, typename Strategy > struct get_comparable > { typedef typename comparable_type < cross_track >::type comparable_type; public : static inline comparable_type apply(cross_track const& strategy) { return comparable_type(strategy.radius()); } }; template < typename Point, typename PointOfSegment, typename CalculationType, typename Strategy > struct result_from_distance > { private : typedef typename cross_track::return_type return_type; public : template static inline return_type apply(cross_track const& , T const& distance) { return distance; } }; template < typename Point, typename PointOfSegment, typename CalculationType, typename Strategy > struct strategy_point_point > { typedef Strategy type; }; /* TODO: spherical polar coordinate system requires "get_as_radian_equatorial<>" template struct default_strategy < segment_tag, Point, PointOfSegment, spherical_polar_tag, spherical_polar_tag, Strategy > { typedef cross_track < Point, PointOfSegment, void, typename boost::mpl::if_ < boost::is_void, typename default_strategy < point_tag, Point, PointOfSegment, spherical_polar_tag, spherical_polar_tag >::type, Strategy >::type > type; }; */ template struct default_strategy < segment_tag, Point, PointOfSegment, spherical_equatorial_tag, spherical_equatorial_tag, Strategy > { typedef cross_track < Point, PointOfSegment, void, typename boost::mpl::if_ < boost::is_void, typename default_strategy < point_tag, Point, PointOfSegment, spherical_equatorial_tag, spherical_equatorial_tag >::type, Strategy >::type > type; }; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::distance #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_HPP distance_haversine.hpp000444000765000024 2305112161110611 30624 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/spherical// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_HAVERSINE_HPP #define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_HAVERSINE_HPP #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace distance { namespace comparable { // Comparable haversine. // To compare distances, we can avoid: // - multiplication with radius and 2.0 // - applying sqrt // - applying asin (which is strictly (monotone) increasing) template < typename Point1, typename Point2 = Point1, typename CalculationType = void > class haversine { public : typedef typename promote_floating_point < typename select_calculation_type < Point1, Point2, CalculationType >::type >::type calculation_type; inline haversine(calculation_type const& r = 1.0) : m_radius(r) {} static inline calculation_type apply(Point1 const& p1, Point2 const& p2) { return calculate(get_as_radian<0>(p1), get_as_radian<1>(p1), get_as_radian<0>(p2), get_as_radian<1>(p2)); } inline calculation_type radius() const { return m_radius; } private : static inline calculation_type calculate(calculation_type const& lon1, calculation_type const& lat1, calculation_type const& lon2, calculation_type const& lat2) { return math::hav(lat2 - lat1) + cos(lat1) * cos(lat2) * math::hav(lon2 - lon1); } calculation_type m_radius; }; } // namespace comparable /*! \brief Distance calculation for spherical coordinates on a perfect sphere using haversine \ingroup strategies \tparam Point1 \tparam_first_point \tparam Point2 \tparam_second_point \tparam CalculationType \tparam_calculation \author Adapted from: http://williams.best.vwh.net/avform.htm \see http://en.wikipedia.org/wiki/Great-circle_distance \note It says: The great circle distance d between two points with coordinates {lat1,lon1} and {lat2,lon2} is given by: d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2)) A mathematically equivalent formula, which is less subject to rounding error for short distances is: d=2*asin(sqrt((sin((lat1-lat2)/2))^2 + cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2)) \qbk{ [heading See also] [link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)] } */ template < typename Point1, typename Point2 = Point1, typename CalculationType = void > class haversine { typedef comparable::haversine comparable_type; public : typedef typename services::return_type::type calculation_type; /*! \brief Constructor \param radius radius of the sphere, defaults to 1.0 for the unit sphere */ inline haversine(calculation_type const& radius = 1.0) : m_radius(radius) {} /*! \brief applies the distance calculation \return the calculated distance (including multiplying with radius) \param p1 first point \param p2 second point */ inline calculation_type apply(Point1 const& p1, Point2 const& p2) const { calculation_type const a = comparable_type::apply(p1, p2); calculation_type const c = calculation_type(2.0) * asin(sqrt(a)); return m_radius * c; } /*! \brief access to radius value \return the radius */ inline calculation_type radius() const { return m_radius; } private : calculation_type m_radius; }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template struct tag > { typedef strategy_tag_distance_point_point type; }; template struct return_type > { typedef typename haversine::calculation_type type; }; template struct similar_type, P1, P2> { typedef haversine type; }; template struct get_similar, P1, P2> { private : typedef haversine this_type; public : static inline typename similar_type::type apply(this_type const& input) { return haversine(input.radius()); } }; template struct comparable_type > { typedef comparable::haversine type; }; template struct get_comparable > { private : typedef haversine this_type; typedef comparable::haversine comparable_type; public : static inline comparable_type apply(this_type const& input) { return comparable_type(input.radius()); } }; template struct result_from_distance > { private : typedef haversine this_type; typedef typename return_type::type return_type; public : template static inline return_type apply(this_type const& , T const& value) { return return_type(value); } }; // Specializations for comparable::haversine template struct tag > { typedef strategy_tag_distance_point_point type; }; template struct return_type > { typedef typename comparable::haversine::calculation_type type; }; template struct similar_type, P1, P2> { typedef comparable::haversine type; }; template struct get_similar, P1, P2> { private : typedef comparable::haversine this_type; public : static inline typename similar_type::type apply(this_type const& input) { return comparable::haversine(input.radius()); } }; template struct comparable_type > { typedef comparable::haversine type; }; template struct get_comparable > { private : typedef comparable::haversine this_type; public : static inline this_type apply(this_type const& input) { return input; } }; template struct result_from_distance > { private : typedef comparable::haversine strategy_type; typedef typename return_type::type return_type; public : template static inline return_type apply(strategy_type const& strategy, T const& distance) { return_type const s = sin((distance / strategy.radius()) / return_type(2)); return s * s; } }; // Register it as the default for point-types // in a spherical equatorial coordinate system template struct default_strategy { typedef strategy::distance::haversine type; }; // Note: spherical polar coordinate system requires "get_as_radian_equatorial" } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS }} // namespace strategy::distance }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_HAVERSINE_HPP side_by_cross_track.hpp000444000765000024 607412161110647 31000 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/spherical// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SIDE_BY_CROSS_TRACK_HPP #define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SIDE_BY_CROSS_TRACK_HPP #include #include #include #include #include #include #include #include //#include namespace boost { namespace geometry { namespace strategy { namespace side { #ifndef DOXYGEN_NO_DETAIL namespace detail { /// Calculate course (bearing) between two points. Might be moved to a "course formula" ... template static inline double course(Point const& p1, Point const& p2) { // http://williams.best.vwh.net/avform.htm#Crs double dlon = get_as_radian<0>(p2) - get_as_radian<0>(p1); double cos_p2lat = cos(get_as_radian<1>(p2)); // "An alternative formula, not requiring the pre-computation of d" return atan2(sin(dlon) * cos_p2lat, cos(get_as_radian<1>(p1)) * sin(get_as_radian<1>(p2)) - sin(get_as_radian<1>(p1)) * cos_p2lat * cos(dlon)); } } #endif // DOXYGEN_NO_DETAIL /*! \brief Check at which side of a Great Circle segment a point lies left of segment (> 0), right of segment (< 0), on segment (0) \ingroup strategies \tparam CalculationType \tparam_calculation */ template class side_by_cross_track { public : template static inline int apply(P1 const& p1, P2 const& p2, P const& p) { typedef typename boost::mpl::if_c < boost::is_void::type::value, typename select_most_precise < typename select_most_precise < typename coordinate_type::type, typename coordinate_type::type >::type, typename coordinate_type

::type >::type, CalculationType >::type coordinate_type; double d1 = 0.001; // m_strategy.apply(sp1, p); double crs_AD = detail::course(p1, p); double crs_AB = detail::course(p1, p2); double XTD = asin(sin(d1) * sin(crs_AD - crs_AB)); return math::equals(XTD, 0) ? 0 : XTD < 0 ? 1 : -1; } }; }} // namespace strategy::side }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SIDE_BY_CROSS_TRACK_HPP ssf.hpp000444000765000024 1024612161110650 25566 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/spherical// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SSF_HPP #define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SSF_HPP #include #include #include #include #include #include #include #include //#include namespace boost { namespace geometry { namespace strategy { namespace side { /*! \brief Check at which side of a Great Circle segment a point lies left of segment (> 0), right of segment (< 0), on segment (0) \ingroup strategies \tparam CalculationType \tparam_calculation */ template class spherical_side_formula { public : template static inline int apply(P1 const& p1, P2 const& p2, P const& p) { typedef typename boost::mpl::if_c < boost::is_void::type::value, // Select at least a double... typename select_most_precise < typename select_most_precise < typename select_most_precise < typename coordinate_type::type, typename coordinate_type::type >::type, typename coordinate_type

::type >::type, double >::type, CalculationType >::type coordinate_type; // Convenient shortcuts typedef coordinate_type ct; ct const lambda1 = get_as_radian<0>(p1); ct const delta1 = get_as_radian<1>(p1); ct const lambda2 = get_as_radian<0>(p2); ct const delta2 = get_as_radian<1>(p2); ct const lambda = get_as_radian<0>(p); ct const delta = get_as_radian<1>(p); // Create temporary points (vectors) on unit a sphere ct const cos_delta1 = cos(delta1); ct const c1x = cos_delta1 * cos(lambda1); ct const c1y = cos_delta1 * sin(lambda1); ct const c1z = sin(delta1); ct const cos_delta2 = cos(delta2); ct const c2x = cos_delta2 * cos(lambda2); ct const c2y = cos_delta2 * sin(lambda2); ct const c2z = sin(delta2); // (Third point is converted directly) ct const cos_delta = cos(delta); // Apply the "Spherical Side Formula" as presented on my blog ct const dist = (c1y * c2z - c1z * c2y) * cos_delta * cos(lambda) + (c1z * c2x - c1x * c2z) * cos_delta * sin(lambda) + (c1x * c2y - c1y * c2x) * sin(delta); ct zero = ct(); return dist > zero ? 1 : dist < zero ? -1 : 0; } }; #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { /*template struct default_strategy { typedef spherical_side_formula type; };*/ template struct default_strategy { typedef spherical_side_formula type; }; template struct default_strategy { typedef spherical_side_formula type; }; } #endif }} // namespace strategy::side }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SSF_HPP transform000755000765000024 012161110677 24154 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategiesinverse_transformer.hpp000444000765000024 500712161110677 31121 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/transform// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP #define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP // Remove the ublas checking, otherwise the inverse might fail // (while nothing seems to be wrong) #define BOOST_UBLAS_TYPE_CHECK 0 #include #include #include namespace boost { namespace geometry { namespace strategy { namespace transform { /*! \brief Transformation strategy to do an inverse ransformation in Cartesian system \ingroup strategies \tparam P1 first point type \tparam P2 second point type */ template class inverse_transformer : public ublas_transformer::type::value, dimension::type::value> { typedef typename select_coordinate_type::type T; public : template inline inverse_transformer(Transformer const& input) { typedef boost::numeric::ublas::matrix matrix_type; // create a working copy of the input matrix_type copy(input.matrix()); // create a permutation matrix for the LU-factorization typedef boost::numeric::ublas::permutation_matrix<> permutation_matrix; permutation_matrix pm(copy.size1()); // perform LU-factorization int res = boost::numeric::ublas::lu_factorize(copy, pm); if( res == 0 ) { // create identity matrix this->m_matrix.assign(boost::numeric::ublas::identity_matrix(copy.size1())); // backsubstitute to get the inverse boost::numeric::ublas::lu_substitute(copy, pm, this->m_matrix); } } }; }} // namespace strategy::transform }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP map_transformer.hpp000444000765000024 1255212161110655 30242 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/transform// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP #define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP #include #include namespace boost { namespace geometry { namespace strategy { namespace transform { /*! \brief Transformation strategy to do map from one to another Cartesian system \ingroup strategies \tparam P1 first point type \tparam P2 second point type \tparam Mirror if true map is mirrored upside-down (in most cases pixels are from top to bottom, while map is from bottom to top) */ template < typename P1, typename P2, bool Mirror = false, bool SameScale = true, std::size_t Dimension1 = dimension::type::value, std::size_t Dimension2 = dimension::type::value > class map_transformer : public ublas_transformer { typedef typename select_coordinate_type::type T; typedef boost::numeric::ublas::matrix M; public : template explicit inline map_transformer(B const& box, D const& width, D const& height) { set_transformation( get(box), get(box), get(box), get(box), width, height); } template explicit inline map_transformer(W const& wx1, W const& wy1, W const& wx2, W const& wy2, D const& width, D const& height) { set_transformation(wx1, wy1, wx2, wy2, width, height); } private : template inline void set_transformation_point(W const& wx, W const& wy, P const& px, P const& py, S const& scalex, S const& scaley) { // Translate to a coordinate system centered on world coordinates (-wx, -wy) M t1(3,3); t1(0,0) = 1; t1(0,1) = 0; t1(0,2) = -wx; t1(1,0) = 0; t1(1,1) = 1; t1(1,2) = -wy; t1(2,0) = 0; t1(2,1) = 0; t1(2,2) = 1; // Scale the map M s(3,3); s(0,0) = scalex; s(0,1) = 0; s(0,2) = 0; s(1,0) = 0; s(1,1) = scaley; s(1,2) = 0; s(2,0) = 0; s(2,1) = 0; s(2,2) = 1; // Translate to a coordinate system centered on the specified pixels (+px, +py) M t2(3, 3); t2(0,0) = 1; t2(0,1) = 0; t2(0,2) = px; t2(1,0) = 0; t2(1,1) = 1; t2(1,2) = py; t2(2,0) = 0; t2(2,1) = 0; t2(2,2) = 1; // Calculate combination matrix in two steps this->m_matrix = boost::numeric::ublas::prod(s, t1); this->m_matrix = boost::numeric::ublas::prod(t2, this->m_matrix); } template void set_transformation(W const& wx1, W const& wy1, W const& wx2, W const& wy2, D const& width, D const& height) { D px1 = 0; D py1 = 0; D px2 = width; D py2 = height; // Get the same type, but at least a double typedef typename select_most_precise::type type; // Calculate appropriate scale, take min because whole box must fit // Scale is in PIXELS/MAPUNITS (meters) W wdx = wx2 - wx1; W wdy = wy2 - wy1; type sx = (px2 - px1) / boost::numeric_cast(wdx); type sy = (py2 - py1) / boost::numeric_cast(wdy); if (SameScale) { type scale = (std::min)(sx, sy); sx = scale; sy = scale; } // Calculate centerpoints W wtx = wx1 + wx2; W wty = wy1 + wy2; W two = 2; W wmx = wtx / two; W wmy = wty / two; type pmx = (px1 + px2) / 2.0; type pmy = (py1 + py2) / 2.0; set_transformation_point(wmx, wmy, pmx, pmy, sx, sy); if (Mirror) { // Mirror in y-direction M m(3,3); m(0,0) = 1; m(0,1) = 0; m(0,2) = 0; m(1,0) = 0; m(1,1) = -1; m(1,2) = 0; m(2,0) = 0; m(2,1) = 0; m(2,2) = 1; // Translate in y-direction such that it fits again M y(3, 3); y(0,0) = 1; y(0,1) = 0; y(0,2) = 0; y(1,0) = 0; y(1,1) = 1; y(1,2) = height; y(2,0) = 0; y(2,1) = 0; y(2,2) = 1; // Calculate combination matrix in two steps this->m_matrix = boost::numeric::ublas::prod(m, this->m_matrix); this->m_matrix = boost::numeric::ublas::prod(y, this->m_matrix); } } }; }} // namespace strategy::transform }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP matrix_transformers.hpp000444000765000024 3233012161110651 31144 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/strategies/transform// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MATRIX_TRANSFORMERS_HPP #define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MATRIX_TRANSFORMERS_HPP #include // Remove the ublas checking, otherwise the inverse might fail // (while nothing seems to be wrong) #define BOOST_UBLAS_TYPE_CHECK 0 #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace transform { /*! \brief Affine transformation strategy in Cartesian system. \details The strategy serves as a generic definition of affine transformation matrix and procedure of application it to given point. \see http://en.wikipedia.org/wiki/Affine_transformation and http://www.devmaster.net/wiki/Transformation_matrices \ingroup strategies \tparam P1 first point type (source) \tparam P2 second point type (target) \tparam Dimension1 number of dimensions to transform from first point \tparam Dimension1 number of dimensions to transform to second point */ template < typename P1, typename P2, std::size_t Dimension1, std::size_t Dimension2 > class ublas_transformer { }; template class ublas_transformer { protected : typedef typename select_coordinate_type::type coordinate_type; typedef coordinate_type ct; // Abbreviation typedef boost::numeric::ublas::matrix matrix_type; matrix_type m_matrix; public : inline ublas_transformer( ct const& m_0_0, ct const& m_0_1, ct const& m_0_2, ct const& m_1_0, ct const& m_1_1, ct const& m_1_2, ct const& m_2_0, ct const& m_2_1, ct const& m_2_2) : m_matrix(3, 3) { m_matrix(0,0) = m_0_0; m_matrix(0,1) = m_0_1; m_matrix(0,2) = m_0_2; m_matrix(1,0) = m_1_0; m_matrix(1,1) = m_1_1; m_matrix(1,2) = m_1_2; m_matrix(2,0) = m_2_0; m_matrix(2,1) = m_2_1; m_matrix(2,2) = m_2_2; } inline ublas_transformer(matrix_type const& matrix) : m_matrix(matrix) {} inline ublas_transformer() : m_matrix(3, 3) {} inline bool apply(P1 const& p1, P2& p2) const { assert_dimension_greater_equal(); assert_dimension_greater_equal(); coordinate_type const& c1 = get<0>(p1); coordinate_type const& c2 = get<1>(p1); coordinate_type p2x = c1 * m_matrix(0,0) + c2 * m_matrix(0,1) + m_matrix(0,2); coordinate_type p2y = c1 * m_matrix(1,0) + c2 * m_matrix(1,1) + m_matrix(1,2); typedef typename geometry::coordinate_type::type ct2; set<0>(p2, boost::numeric_cast(p2x)); set<1>(p2, boost::numeric_cast(p2y)); return true; } matrix_type const& matrix() const { return m_matrix; } }; // It IS possible to go from 3 to 2 coordinates template class ublas_transformer : public ublas_transformer { typedef typename select_coordinate_type::type coordinate_type; typedef coordinate_type ct; // Abbreviation public : inline ublas_transformer( ct const& m_0_0, ct const& m_0_1, ct const& m_0_2, ct const& m_1_0, ct const& m_1_1, ct const& m_1_2, ct const& m_2_0, ct const& m_2_1, ct const& m_2_2) : ublas_transformer( m_0_0, m_0_1, m_0_2, m_1_0, m_1_1, m_1_2, m_2_0, m_2_1, m_2_2) {} inline ublas_transformer() : ublas_transformer() {} }; template class ublas_transformer { protected : typedef typename select_coordinate_type::type coordinate_type; typedef coordinate_type ct; // Abbreviation typedef boost::numeric::ublas::matrix matrix_type; matrix_type m_matrix; inline ublas_transformer( ct const& m_0_0, ct const& m_0_1, ct const& m_0_2, ct const& m_0_3, ct const& m_1_0, ct const& m_1_1, ct const& m_1_2, ct const& m_1_3, ct const& m_2_0, ct const& m_2_1, ct const& m_2_2, ct const& m_2_3, ct const& m_3_0, ct const& m_3_1, ct const& m_3_2, ct const& m_3_3 ) : m_matrix(4, 4) { m_matrix(0,0) = m_0_0; m_matrix(0,1) = m_0_1; m_matrix(0,2) = m_0_2; m_matrix(0,3) = m_0_3; m_matrix(1,0) = m_1_0; m_matrix(1,1) = m_1_1; m_matrix(1,2) = m_1_2; m_matrix(1,3) = m_1_3; m_matrix(2,0) = m_2_0; m_matrix(2,1) = m_2_1; m_matrix(2,2) = m_2_2; m_matrix(2,3) = m_2_3; m_matrix(3,0) = m_3_0; m_matrix(3,1) = m_3_1; m_matrix(3,2) = m_3_2; m_matrix(3,3) = m_3_3; } inline ublas_transformer() : m_matrix(4, 4) {} public : inline bool apply(P1 const& p1, P2& p2) const { coordinate_type const& c1 = get<0>(p1); coordinate_type const& c2 = get<1>(p1); coordinate_type const& c3 = get<2>(p1); typedef typename geometry::coordinate_type::type ct2; set<0>(p2, boost::numeric_cast( c1 * m_matrix(0,0) + c2 * m_matrix(0,1) + c3 * m_matrix(0,2) + m_matrix(0,3))); set<1>(p2, boost::numeric_cast( c1 * m_matrix(1,0) + c2 * m_matrix(1,1) + c3 * m_matrix(1,2) + m_matrix(1,3))); set<2>(p2, boost::numeric_cast( c1 * m_matrix(2,0) + c2 * m_matrix(2,1) + c3 * m_matrix(2,2) + m_matrix(2,3))); return true; } matrix_type const& matrix() const { return m_matrix; } }; /*! \brief Strategy of translate transformation in Cartesian system. \details Translate moves a geometry a fixed distance in 2 or 3 dimensions. \see http://en.wikipedia.org/wiki/Translation_%28geometry%29 \ingroup strategies \tparam P1 first point type \tparam P2 second point type \tparam Dimension1 number of dimensions to transform from first point \tparam Dimension1 number of dimensions to transform to second point */ template < typename P1, typename P2, std::size_t Dimension1 = geometry::dimension::type::value, std::size_t Dimension2 = geometry::dimension::type::value > class translate_transformer { }; template class translate_transformer : public ublas_transformer { typedef typename select_coordinate_type::type coordinate_type; public : // To have translate transformers compatible for 2/3 dimensions, the // constructor takes an optional third argument doing nothing. inline translate_transformer(coordinate_type const& translate_x, coordinate_type const& translate_y, coordinate_type const& = 0) : ublas_transformer( 1, 0, translate_x, 0, 1, translate_y, 0, 0, 1) {} }; template class translate_transformer : public ublas_transformer { typedef typename select_coordinate_type::type coordinate_type; public : inline translate_transformer(coordinate_type const& translate_x, coordinate_type const& translate_y, coordinate_type const& translate_z) : ublas_transformer( 1, 0, 0, translate_x, 0, 1, 0, translate_y, 0, 0, 1, translate_z, 0, 0, 0, 1) {} }; /*! \brief Strategy of scale transformation in Cartesian system. \details Scale scales a geometry up or down in all its dimensions. \see http://en.wikipedia.org/wiki/Scaling_%28geometry%29 \ingroup strategies \tparam P1 first point type \tparam P2 second point type \tparam Dimension1 number of dimensions to transform from first point \tparam Dimension1 number of dimensions to transform to second point */ template < typename P1, typename P2 = P1, std::size_t Dimension1 = geometry::dimension::type::value, std::size_t Dimension2 = geometry::dimension::type::value > class scale_transformer { }; template class scale_transformer : public ublas_transformer { typedef typename select_coordinate_type::type coordinate_type; public : inline scale_transformer(coordinate_type const& scale_x, coordinate_type const& scale_y, coordinate_type const& = 0) : ublas_transformer( scale_x, 0, 0, 0, scale_y, 0, 0, 0, 1) {} inline scale_transformer(coordinate_type const& scale) : ublas_transformer( scale, 0, 0, 0, scale, 0, 0, 0, 1) {} }; template class scale_transformer : public ublas_transformer { typedef typename select_coordinate_type::type coordinate_type; inline scale_transformer(coordinate_type const& scale_x, coordinate_type const& scale_y, coordinate_type const& scale_z) : ublas_transformer( scale_x, 0, 0, 0, 0, scale_y, 0, 0, 0, 0, scale_z, 0, 0, 0, 0, 1) {} inline scale_transformer(coordinate_type const& scale) : ublas_transformer( scale, 0, 0, 0, 0, scale, 0, 0, 0, 0, scale, 0, 0, 0, 0, 1) {} }; #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct as_radian {}; template <> struct as_radian { template static inline T get(T const& value) { return value; } }; template <> struct as_radian { template static inline T get(T const& value) { return value * math::d2r; } }; template < typename P1, typename P2, std::size_t Dimension1 = geometry::dimension::type::value, std::size_t Dimension2 = geometry::dimension::type::value > class rad_rotate_transformer : public ublas_transformer { // Angle has type of coordinate type, but at least a double typedef typename select_most_precise < typename select_coordinate_type::type, double >::type angle_type; public : inline rad_rotate_transformer(angle_type const& angle) : ublas_transformer( cos(angle), sin(angle), 0, -sin(angle), cos(angle), 0, 0, 0, 1) {} }; } // namespace detail #endif // DOXYGEN_NO_DETAIL /*! \brief Strategy of rotate transformation in Cartesian system. \details Rotate rotates a geometry of specified angle about a fixed point (e.g. origin). \see http://en.wikipedia.org/wiki/Rotation_%28mathematics%29 \ingroup strategies \tparam P1 first point type \tparam P2 second point type \tparam DegreeOrRadian degree/or/radian, type of rotation angle specification \note A single angle is needed to specify a rotation in 2D. Not yet in 3D, the 3D version requires special things to allow for rotation around X, Y, Z or arbitrary axis. \todo The 3D version will not compile. */ template class rotate_transformer : public detail::rad_rotate_transformer { // Angle has type of coordinate type, but at least a double typedef typename select_most_precise < typename select_coordinate_type::type, double >::type angle_type; public : inline rotate_transformer(angle_type const& angle) : detail::rad_rotate_transformer < P1, P2 >(detail::as_radian::get(angle)) {} }; }} // namespace strategy::transform }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MATRIX_TRANSFORMERS_HPP util000755000765000024 012161110657 20742 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometryadd_const_if_c.hpp000444000765000024 330512161110620 24515 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_ADD_CONST_IF_C_HPP #define BOOST_GEOMETRY_UTIL_ADD_CONST_IF_C_HPP #include namespace boost { namespace geometry { /*! \brief Meta-function to define a const or non const type \ingroup utility \details If the boolean template parameter is true, the type parameter will be defined as const, otherwise it will be defined as it was. This meta-function is used to have one implementation for both const and non const references \note This traits class is completely independant from Boost.Geometry and might be a separate addition to Boost \note Used in a.o. for_each, interior_rings, exterior_ring \par Example \code void foo(typename add_const_if_c::type& point) \endcode */ template struct add_const_if_c { typedef typename boost::mpl::if_c < IsConst, Type const, Type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_ADD_CONST_IF_C_HPP bare_type.hpp000444000765000024 160212161110621 23550 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2012 Bruno Lalande, Paris, France. // Copyright (c) 2012 Mateusz Loskot, London, UK. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP #define BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP #include namespace boost { namespace geometry { namespace util { template struct bare_type { typedef typename boost::remove_const < typename boost::remove_pointer::type >::type type; }; } // namespace util }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP calculation_type.hpp000444000765000024 1117412161110637 25171 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2012 Bruno Lalande, Paris, France. // Copyright (c) 2012 Mateusz Loskot, London, UK. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP #define BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace util { namespace detail { struct default_integral { #ifdef BOOST_HAS_LONG_LONG typedef boost::long_long_type type; #else typedef int type; #endif }; /*! \details Selects the most appropriate: - if calculation type is specified (not void), that one is used - else if type is non-fundamental (user defined e.g. ttmath), that one - else if type is floating point, the specified default FP is used - else it is integral and the specified default integral is used */ template < typename Type, typename CalculationType, typename DefaultFloatingPointCalculationType, typename DefaultIntegralCalculationType > struct calculation_type { BOOST_STATIC_ASSERT(( boost::is_fundamental < DefaultFloatingPointCalculationType >::type::value )); BOOST_STATIC_ASSERT(( boost::is_fundamental < DefaultIntegralCalculationType >::type::value )); typedef typename boost::mpl::if_ < boost::is_void, typename boost::mpl::if_ < boost::is_floating_point, typename select_most_precise < DefaultFloatingPointCalculationType, Type >::type, typename select_most_precise < DefaultIntegralCalculationType, Type >::type >::type, CalculationType >::type type; }; } // namespace detail namespace calculation_type { namespace geometric { template < typename Geometry, typename CalculationType, typename DefaultFloatingPointCalculationType = double, typename DefaultIntegralCalculationType = detail::default_integral::type > struct unary { typedef typename detail::calculation_type < typename geometry::coordinate_type::type, CalculationType, DefaultFloatingPointCalculationType, DefaultIntegralCalculationType >::type type; }; template < typename Geometry1, typename Geometry2, typename CalculationType, typename DefaultFloatingPointCalculationType = double, typename DefaultIntegralCalculationType = detail::default_integral::type > struct binary { typedef typename detail::calculation_type < typename select_coordinate_type::type, CalculationType, DefaultFloatingPointCalculationType, DefaultIntegralCalculationType >::type type; }; /*! \brief calculation type (ternary, for three geometry types) */ template < typename Geometry1, typename Geometry2, typename Geometry3, typename CalculationType, typename DefaultFloatingPointCalculationType = double, typename DefaultIntegralCalculationType = detail::default_integral::type > struct ternary { typedef typename detail::calculation_type < typename select_most_precise < typename coordinate_type::type, typename select_coordinate_type < Geometry2, Geometry3 >::type >::type, CalculationType, DefaultFloatingPointCalculationType, DefaultIntegralCalculationType >::type type; }; }} // namespace calculation_type::geometric } // namespace util }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP closure_as_bool.hpp000444000765000024 214612161110620 24753 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_CLOSURE_AS_BOOL_HPP #define BOOST_GEOMETRY_UTIL_CLOSURE_AS_BOOL_HPP #include namespace boost { namespace geometry { template struct closure_as_bool {}; template<> struct closure_as_bool { static const bool value = true; }; template<> struct closure_as_bool { static const bool value = false; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_CLOSURE_AS_BOOL_HPP coordinate_cast.hpp000444000765000024 306112161110621 24740 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_COORDINATE_CAST_HPP #define BOOST_GEOMETRY_UTIL_COORDINATE_CAST_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { /*! \brief cast coordinates from a string to a coordinate type \detail By default it uses lexical_cast. However, lexical_cast seems not to support ttmath / partial specializations. Therefore this small utility is added. See also "define_pi" where the same issue is solved */ template struct coordinate_cast { static inline CoordinateType apply(std::string const& source) { #if defined(BOOST_GEOMETRY_NO_LEXICAL_CAST) return atof(source.c_str()); #else return boost::lexical_cast(source); #endif } }; } // namespace detail #endif }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_COORDINATE_CAST_HPP for_each_coordinate.hpp000444000765000024 523712161110616 25567 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP #define BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct coordinates_scanner { template static inline Op apply(typename add_const_if_c < IsConst, Point >::type& point, Op operation) { operation.template apply(point); return coordinates_scanner < Point, Dimension+1, DimensionCount, IsConst >::apply(point, operation); } }; template struct coordinates_scanner { template static inline Op apply(typename add_const_if_c < IsConst, Point >::type& , Op operation) { return operation; } }; } // namespace detail #endif // DOXYGEN_NO_DETAIL template inline void for_each_coordinate(Point& point, Op operation) { BOOST_CONCEPT_ASSERT( (concept::Point) ); typedef typename detail::coordinates_scanner < Point, 0, dimension::type::value, false > scanner; scanner::apply(point, operation); } template inline Op for_each_coordinate(Point const& point, Op operation) { BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); typedef typename detail::coordinates_scanner < Point, 0, dimension::type::value, true > scanner; return scanner::apply(point, operation); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP math.hpp000444000765000024 1247612161110602 22561 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_MATH_HPP #define BOOST_GEOMETRY_UTIL_MATH_HPP #include #include #include #include namespace boost { namespace geometry { namespace math { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct equals { static inline bool apply(Type const& a, Type const& b) { return a == b; } }; template struct equals { static inline Type get_max(Type const& a, Type const& b, Type const& c) { return (std::max)((std::max)(a, b), c); } static inline bool apply(Type const& a, Type const& b) { if (a == b) { return true; } // See http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.17, // FUTURE: replace by some boost tool or boost::test::close_at_tolerance return std::abs(a - b) <= std::numeric_limits::epsilon() * get_max(std::abs(a), std::abs(b), 1.0); } }; template struct smaller { static inline bool apply(Type const& a, Type const& b) { return a < b; } }; template struct smaller { static inline bool apply(Type const& a, Type const& b) { if (equals::apply(a, b)) { return false; } return a < b; } }; template struct equals_with_epsilon : public equals {}; /*! \brief Short construct to enable partial specialization for PI, currently not possible in Math. */ template struct define_pi { static inline T apply() { // Default calls Boost.Math return boost::math::constants::pi(); } }; } // namespace detail #endif template inline T pi() { return detail::define_pi::apply(); } // Maybe replace this by boost equals or boost ublas numeric equals or so /*! \brief returns true if both arguments are equal. \ingroup utility \param a first argument \param b second argument \return true if a == b \note If both a and b are of an integral type, comparison is done by ==. If one of the types is floating point, comparison is done by abs and comparing with epsilon. If one of the types is non-fundamental, it might be a high-precision number and comparison is done using the == operator of that class. */ template inline bool equals(T1 const& a, T2 const& b) { typedef typename select_most_precise::type select_type; return detail::equals < select_type, boost::is_floating_point::type::value >::apply(a, b); } template inline bool equals_with_epsilon(T1 const& a, T2 const& b) { typedef typename select_most_precise::type select_type; return detail::equals_with_epsilon < select_type, boost::is_floating_point::type::value >::apply(a, b); } template inline bool smaller(T1 const& a, T2 const& b) { typedef typename select_most_precise::type select_type; return detail::smaller < select_type, boost::is_floating_point::type::value >::apply(a, b); } template inline bool larger(T1 const& a, T2 const& b) { typedef typename select_most_precise::type select_type; return detail::smaller < select_type, boost::is_floating_point::type::value >::apply(b, a); } double const d2r = geometry::math::pi() / 180.0; double const r2d = 1.0 / d2r; /*! \brief Calculates the haversine of an angle \ingroup utility \note See http://en.wikipedia.org/wiki/Haversine_formula haversin(alpha) = sin2(alpha/2) */ template inline T hav(T const& theta) { T const half = T(0.5); T const sn = sin(half * theta); return sn * sn; } /*! \brief Short utility to return the square \ingroup utility \param value Value to calculate the square from \return The squared value */ template inline T sqr(T const& value) { return value * value; } /*! \brief Short utility to workaround gcc/clang problem that abs is converting to integer \ingroup utility */ template inline T abs(const T& t) { using std::abs; return abs(t); } } // namespace math }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_MATH_HPP order_as_direction.hpp000444000765000024 235112161110655 25445 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_ORDER_AS_DIRECTION_HPP #define BOOST_GEOMETRY_UTIL_ORDER_AS_DIRECTION_HPP #include #include namespace boost { namespace geometry { template struct order_as_direction {}; template<> struct order_as_direction { static const iterate_direction value = iterate_forward; }; template<> struct order_as_direction { static const iterate_direction value = iterate_reverse; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_ORDER_AS_DIRECTION_HPP parameter_type_of.hpp000444000765000024 425712161110616 25320 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP #define BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Meta-function selecting a parameter type of a (member) function, by index \ingroup utility */ template struct parameter_type_of { typedef typename boost::function_types::parameter_types < Method >::type parameter_types; typedef typename boost::mpl::if_ < boost::function_types::is_member_function_pointer, boost::mpl::int_<1>, boost::mpl::int_<0> >::type base_index_type; typedef typename boost::mpl::if_c < Index == 0, base_index_type, typename boost::mpl::plus < base_index_type, boost::mpl::int_ >::type >::type indexed_type; typedef typename boost::remove_reference < typename boost::mpl::at < parameter_types, indexed_type >::type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP promote_floating_point.hpp000444000765000024 256212161110660 26370 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP #define BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP #include #include namespace boost { namespace geometry { /*! \brief Meta-function converting, if necessary, to "a floating point" type \details - if input type is integer, type is double - else type is input type \ingroup utility */ template struct promote_floating_point { typedef typename boost::mpl::if_ < boost::is_integral, PromoteIntegerTo, T >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP rational.hpp000444000765000024 1110312161110654 23432 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2011-2012 Bruno Lalande, Paris, France. // Copyright (c) 2011-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_RATIONAL_HPP #define BOOST_GEOMETRY_UTIL_RATIONAL_HPP #include #include #include #include namespace boost{ namespace geometry { // Specialize for Boost.Geometry's coordinate cast // (from string to coordinate type) namespace detail { template struct coordinate_cast > { static inline void split_parts(std::string const& source, std::string::size_type p, T& before, T& after, bool& negate, std::string::size_type& len) { std::string before_part = source.substr(0, p); std::string const after_part = source.substr(p + 1); negate = false; if (before_part.size() > 0 && before_part[0] == '-') { negate = true; before_part.erase(0, 1); } before = atol(before_part.c_str()); after = atol(after_part.c_str()); len = after_part.length(); } static inline rational apply(std::string const& source) { T before, after; bool negate; std::string::size_type len; // Note: decimal comma is not (yet) supported, it does (and should) not // occur in a WKT, where points are comma separated. std::string::size_type p = source.find("."); if (p == std::string::npos) { p = source.find("/"); if (p == std::string::npos) { return rational(atol(source.c_str())); } split_parts(source, p, before, after, negate, len); return negate ? -rational(before, after) : rational(before, after) ; } split_parts(source, p, before, after, negate, len); T den = 1; for (std::string::size_type i = 0; i < len; i++) { den *= 10; } return negate ? -rational(before) - rational(after, den) : rational(before) + rational(after, den) ; } }; } // namespace detail // Specialize for Boost.Geometry's select_most_precise template struct select_most_precise, boost::rational > { typedef typename boost::rational < typename select_most_precise::type > type; }; template struct select_most_precise, double> { typedef typename boost::rational type; }; }} // namespace boost::geometry // Specializes boost::rational to boost::numeric::bounds namespace boost { namespace numeric { template struct bounds > { static inline rational lowest() { return rational(bounds::lowest(), 1); } static inline rational highest() { return rational(bounds::highest(), 1); } }; }} // namespace boost::numeric // Support for boost::numeric_cast to int and to double (necessary for SVG-mapper) namespace boost { namespace numeric { template < typename T, typename Traits, typename OverflowHandler, typename Float2IntRounder, typename RawConverter, typename UserRangeChecker > struct converter, Traits, OverflowHandler, Float2IntRounder, RawConverter, UserRangeChecker> { static inline int convert(rational const& arg) { return int(rational_cast(arg)); } }; template < typename T, typename Traits, typename OverflowHandler, typename Float2IntRounder, typename RawConverter, typename UserRangeChecker > struct converter, Traits, OverflowHandler, Float2IntRounder, RawConverter, UserRangeChecker> { static inline double convert(rational const& arg) { return rational_cast(arg); } }; }} #endif // BOOST_GEOMETRY_UTIL_RATIONAL_HPP readme.txt000444000765000024 141412161110655 23073 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2011 Bruno Lalande, Paris, France. // Copyright (c) 2009-2011 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the 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 folder contains several headerfiles not fitting in one of the other folders, or meta-functions which would fit into boost as a separate trait or utility, such as add_const_if_c select_calculation_type.hpp000444000765000024 344512161110637 26512 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_SELECT_CALCULATION_TYPE_HPP #define BOOST_GEOMETRY_UTIL_SELECT_CALCULATION_TYPE_HPP #include #include #include namespace boost { namespace geometry { /*! \brief Meta-function selecting the "calculation" type \details Based on two input geometry types, and an input calculation type, (which defaults to void in the calling function), this meta-function selects the most appropriate: - if calculation type is specified, that one is used, - if it is void, the most precise of the two points is used \ingroup utility */ template struct select_calculation_type { typedef typename boost::mpl::if_ < boost::is_void, typename select_coordinate_type < Geometry1, Geometry2 >::type, CalculationType >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_SELECT_CALCULATION_TYPE_HPP select_coordinate_type.hpp000444000765000024 247512161110601 26334 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_SELECT_COORDINATE_TYPE_HPP #define BOOST_GEOMETRY_UTIL_SELECT_COORDINATE_TYPE_HPP #include #include namespace boost { namespace geometry { /*! \brief Meta-function selecting the most precise coordinate type of two geometries \ingroup utility */ template struct select_coordinate_type { typedef typename select_most_precise < typename coordinate_type::type, typename coordinate_type::type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_SELECT_COORDINATE_TYPE_HPP select_most_precise.hpp000444000765000024 1164212161110641 25660 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/util// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_UTIL_SELECT_MOST_PRECISE_HPP #define BOOST_GEOMETRY_UTIL_SELECT_MOST_PRECISE_HPP #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace select_most_precise { // At least one of the types is non-fundamental. Take that one. // if both are non-fundamental, the type-to-be-selected // is unknown, it should be defined by explicit specialization. template struct select_non_fundamental { typedef T1 type; }; template struct select_non_fundamental { typedef T2 type; }; template struct select_non_fundamental { typedef T1 type; }; // Selection of largest type (e.g. int of // It defaults takes the first one, if second is larger, take the second one template struct select_largest { typedef T1 type; }; template struct select_largest { typedef T2 type; }; // Selection of floating point and specializations: // both FP or both !FP does never occur... template struct select_floating_point { typedef char type; }; // ... so if ONE but not both of these types is floating point, take that one template struct select_floating_point { typedef T1 type; }; template struct select_floating_point { typedef T2 type; }; }} // namespace detail::select_most_precise #endif // DOXYGEN_NO_DETAIL /*! \brief Meta-function to select, of two types, the most accurate type for calculations \ingroup utility \details select_most_precise classes, compares two types on compile time. For example, if an addition must be done with a double and an integer, the result must be a double. If both types are integer, the result can be an integer. \note It is different from the "promote" class, already in boost. That class promotes e.g. a (one) float to a double. This class selects a type from two types. It takes the most accurate, but does not promote afterwards. \note This traits class is completely independant from GGL and might be a separate addition to Boost \note If the input is a non-fundamental type, it might be a calculation type such as a GMP-value or another high precision value. Therefore, if one is non-fundamental, that one is chosen. \note If both types are non-fundamental, the result is indeterminate and currently the first one is chosen. */ template struct select_most_precise { static const bool second_larger = sizeof(T2) > sizeof(T1); static const bool one_not_fundamental = ! (boost::is_fundamental::type::value && boost::is_fundamental::type::value); static const bool both_same = boost::is_floating_point::type::value == boost::is_floating_point::type::value; typedef typename boost::mpl::if_c < one_not_fundamental, typename detail::select_most_precise::select_non_fundamental < boost::is_fundamental::type::value, boost::is_fundamental::type::value, T1, T2 >::type, typename boost::mpl::if_c < both_same, typename detail::select_most_precise::select_largest < second_larger, T1, T2 >::type, typename detail::select_most_precise::select_floating_point < boost::is_floating_point::type::value, boost::is_floating_point::type::value, T1, T2 >::type >::type >::type type; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_UTIL_SELECT_MOST_PRECISE_HPP views000755000765000024 012161110675 21122 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometrybox_view.hpp000444000765000024 553112161110640 23606 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/views// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_VIEWS_BOX_VIEW_HPP #define BOOST_GEOMETRY_VIEWS_BOX_VIEW_HPP #include #include #include #include namespace boost { namespace geometry { /*! \brief Makes a box behave like a ring or a range \details Adapts a box to the Boost.Range concept, enabling the user to iterating box corners. The box_view is registered as a Ring Concept \tparam Box \tparam_geometry{Box} \tparam Clockwise If true, walks in clockwise direction, otherwise it walks in counterclockwise direction \ingroup views \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_ring Ring Concept] } \qbk{[include reference/views/box_view.qbk]} */ template struct box_view : public detail::points_view < typename geometry::point_type::type, 5 > { typedef typename geometry::point_type::type point_type; /// Constructor accepting the box to adapt explicit box_view(Box const& box) : detail::points_view(copy_policy(box)) {} private : class copy_policy { public : inline copy_policy(Box const& box) : m_box(box) {} inline void apply(point_type* points) const { detail::assign_box_corners_oriented(m_box, points); points[4] = points[0]; } private : Box const& m_box; }; }; #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS // All views on boxes are handled as rings namespace traits { template struct tag > { typedef ring_tag type; }; template struct point_order > { static order_selector const value = counterclockwise; }; template struct point_order > { static order_selector const value = clockwise; }; } #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_VIEWS_BOX_VIEW_HPP closeable_view.hpp000444000765000024 553112161110675 24757 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/views// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_VIEWS_CLOSEABLE_VIEW_HPP #define BOOST_GEOMETRY_VIEWS_CLOSEABLE_VIEW_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct closing_view { // Keep this explicit, important for nested views/ranges explicit inline closing_view(Range& r) : m_range(r) {} typedef closing_iterator iterator; typedef closing_iterator const_iterator; inline const_iterator begin() const { return const_iterator(m_range); } inline const_iterator end() const { return const_iterator(m_range, true); } inline iterator begin() { return iterator(m_range); } inline iterator end() { return iterator(m_range, true); } private : Range& m_range; }; } #endif // DOXYGEN_NO_DETAIL /*! \brief View on a range, either closing it or leaving it as it is \details The closeable_view is used internally by the library to handle all rings, either closed or open, the same way. The default method is closed, all algorithms process rings as if they are closed. Therefore, if they are opened, a view is created which closes them. The closeable_view might be used by library users, but its main purpose is internally. \tparam Range Original range \tparam Close Specifies if it the range is closed, if so, nothing will happen. If it is open, it will iterate the first point after the last point. \ingroup views */ template struct closeable_view {}; #ifndef DOXYGEN_NO_SPECIALIZATIONS template struct closeable_view { typedef identity_view type; }; template struct closeable_view { typedef detail::closing_view type; }; #endif // DOXYGEN_NO_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_VIEWS_CLOSEABLE_VIEW_HPP identity_view.hpp000444000765000024 301312161110640 24640 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/views// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_VIEWS_IDENTITY_VIEW_HPP #define BOOST_GEOMETRY_VIEWS_IDENTITY_VIEW_HPP #include namespace boost { namespace geometry { /*! \brief View on a range, not modifying anything \tparam Range original range \ingroup views */ template struct identity_view { typedef typename boost::range_iterator::type const_iterator; typedef typename boost::range_iterator::type iterator; explicit inline identity_view(Range& r) : m_range(r) {} inline const_iterator begin() const { return boost::begin(m_range); } inline const_iterator end() const { return boost::end(m_range); } inline iterator begin() { return boost::begin(m_range); } inline iterator end() { return boost::end(m_range); } private : Range& m_range; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_VIEWS_IDENTITY_VIEW_HPP reversible_view.hpp000444000765000024 372512161110614 25164 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/views// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_VIEWS_REVERSIBLE_VIEW_HPP #define BOOST_GEOMETRY_VIEWS_REVERSIBLE_VIEW_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { /*! \brief Flag for iterating a reversible_view in forward or reverse direction \ingroup views */ enum iterate_direction { iterate_forward, iterate_reverse }; /*! \brief View on a range, reversing direction if necessary \tparam Range original range \tparam Direction direction of iteration \ingroup views */ template struct reversible_view {}; #ifndef DOXYGEN_NO_SPECIALIZATIONS template struct reversible_view { typedef identity_view type; }; template struct reversible_view { #if BOOST_VERSION > 104500 typedef boost::reversed_range type; #else // For older versions of Boost typedef boost::range_detail::reverse_range type; #endif }; #endif // DOXYGEN_NO_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_VIEWS_REVERSIBLE_VIEW_HPP segment_view.hpp000444000765000024 517612161110653 24471 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/views// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_VIEWS_SEGMENT_VIEW_HPP #define BOOST_GEOMETRY_VIEWS_SEGMENT_VIEW_HPP #include #include #include #include namespace boost { namespace geometry { /*! \brief Makes a segment behave like a linestring or a range \details Adapts a segment to the Boost.Range concept, enabling the user to iterate the two segment points. The segment_view is registered as a LineString Concept \tparam Segment \tparam_geometry{Segment} \ingroup views \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_linestring LineString Concept] } \qbk{[include reference/views/segment_view.qbk]} */ template struct segment_view : public detail::points_view < typename geometry::point_type::type, 2 > { typedef typename geometry::point_type::type point_type; /// Constructor accepting the segment to adapt explicit segment_view(Segment const& segment) : detail::points_view(copy_policy(segment)) {} private : class copy_policy { public : inline copy_policy(Segment const& segment) : m_segment(segment) {} inline void apply(point_type* points) const { geometry::detail::assign_point_from_index<0>(m_segment, points[0]); geometry::detail::assign_point_from_index<1>(m_segment, points[1]); } private : Segment const& m_segment; }; }; #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS // All segment ranges can be handled as linestrings namespace traits { template struct tag > { typedef linestring_tag type; }; } #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_VIEWS_SEGMENT_VIEW_HPP detail000755000765000024 012161110677 22366 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/viewspoints_view.hpp000444000765000024 752512161110677 25613 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/views/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_VIEWS_DETAIL_POINTS_VIEW_HPP #define BOOST_GEOMETRY_VIEWS_DETAIL_POINTS_VIEW_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace detail { // Adapts pointer, on points, to a Boost.Range template class points_view { // Iterates over a series of points (indicated by pointer // to have it lightweight). Probably there is already an // equivalent of this within Boost. If so, TODO: use that one. // This used to be "box_iterator" and "segment_iterator". struct points_iterator : public boost::iterator_facade < points_iterator, Point const, boost::random_access_traversal_tag > { // Constructor: Begin iterator inline points_iterator(Point const* p) : m_points(p) , m_index(0) {} // Constructor: End iterator inline points_iterator(Point const* p, bool) : m_points(p) , m_index(MaxSize) {} // Constructor: default (for Range Concept checking). inline points_iterator() : m_points(NULL) , m_index(MaxSize) {} typedef std::ptrdiff_t difference_type; private: friend class boost::iterator_core_access; inline Point const& dereference() const { if (m_index >= 0 && m_index < MaxSize) { return m_points[m_index]; } // If it index larger (or smaller) return first point // (assuming initialized) return m_points[0]; } inline bool equal(points_iterator const& other) const { return other.m_index == this->m_index; } inline void increment() { m_index++; } inline void decrement() { m_index--; } inline difference_type distance_to(points_iterator const& other) const { return other.m_index - this->m_index; } inline void advance(difference_type n) { m_index += n; } Point const* m_points; int m_index; }; public : typedef points_iterator const_iterator; typedef points_iterator iterator; // must be defined const_iterator begin() const { return const_iterator(m_points); } const_iterator end() const { return const_iterator(m_points, true); } // It may NOT be used non-const, so commented: //iterator begin() { return m_begin; } //iterator end() { return m_end; } protected : template explicit points_view(CopyPolicy const& copy) { copy.apply(m_points); } private : // Copy points here - box might define them otherwise Point m_points[MaxSize]; }; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_VIEWS_DETAIL_POINTS_VIEW_HPP range_type.hpp000444000765000024 505512161110601 25361 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/geometry/views/detail// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_VIEWS_DETAIL_RANGE_TYPE_HPP #define BOOST_GEOMETRY_VIEWS_DETAIL_RANGE_TYPE_HPP #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct range_type { BOOST_MPL_ASSERT_MSG ( false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE , (types) ); }; template struct range_type { typedef Geometry type; }; template struct range_type { typedef Geometry type; }; template struct range_type { typedef typename ring_type::type type; }; template struct range_type { typedef box_view type; }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH // Will probably be replaced by the more generic "view_as", therefore in detail namespace detail { /*! \brief Meta-function defining a type which is a boost-range. \details - For linestrings and rings, it defines the type itself. - For polygons it defines the ring type. - For multi-points, it defines the type itself - For multi-polygons and multi-linestrings, it defines the single-version (so in the end the linestring and ring-type-of-multi-polygon) \ingroup iterators */ template struct range_type { typedef typename dispatch::range_type < typename tag::type, Geometry >::type type; }; } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_VIEWS_DETAIL_RANGE_TYPE_HPP graph000755000765000024 012161110702 17222 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostaccounting.hpp000444000765000024 162012161110627 22227 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// Copyright 2005 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_ACCOUNTING_HPP #define BOOST_GRAPH_ACCOUNTING_HPP #include #include #include #include #include namespace boost { namespace graph { namespace accounting { typedef double time_type; inline time_type get_time() { return MPI_Wtime(); } inline std::string print_time(time_type t) { std::ostringstream out; out << std::setiosflags(std::ios::fixed) << std::setprecision(2) << t; return out.str(); } } } } // end namespace boost::graph::accounting #endif // BOOST_GRAPH_ACCOUNTING_HPP adjacency_iterator.hpp000444000765000024 626112161110664 23736 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 2002 Indiana University. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_ADJACENCY_ITERATOR_HPP #define BOOST_ADJACENCY_ITERATOR_HPP #include #include namespace boost { template struct adjacency_iterator : iterator_adaptor< adjacency_iterator , OutEdgeIter , Vertex , use_default , Vertex , Difference > { typedef iterator_adaptor< adjacency_iterator , OutEdgeIter , Vertex , use_default , Vertex , Difference > super_t; inline adjacency_iterator() {} inline adjacency_iterator(OutEdgeIter const& i, const Graph* g) : super_t(i), m_g(g) { } inline Vertex dereference() const { return target(*this->base(), *m_g); } const Graph* m_g; }; template ::vertex_descriptor, class OutEdgeIter=typename graph_traits::out_edge_iterator> class adjacency_iterator_generator { typedef typename boost::detail::iterator_traits ::difference_type difference_type; public: typedef adjacency_iterator type; }; template struct inv_adjacency_iterator : iterator_adaptor< inv_adjacency_iterator , InEdgeIter , Vertex , use_default , Vertex , Difference > { typedef iterator_adaptor< inv_adjacency_iterator , InEdgeIter , Vertex , use_default , Vertex , Difference > super_t; inline inv_adjacency_iterator() { } inline inv_adjacency_iterator(InEdgeIter const& i, const Graph* g) : super_t(i), m_g(g) { } inline Vertex dereference() const { return source(*this->base(), *m_g); } const Graph* m_g; }; template ::vertex_descriptor, class InEdgeIter = typename graph_traits::in_edge_iterator> class inv_adjacency_iterator_generator { typedef typename boost::detail::iterator_traits ::difference_type difference_type; public: typedef inv_adjacency_iterator type; }; } // namespace boost #endif // BOOST_DETAIL_ADJACENCY_ITERATOR_HPP adjacency_list.hpp000444000765000024 3503112161110667 23100 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Copyright 2010 Thomas Claveirole // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_ADJACENCY_LIST_HPP #define BOOST_GRAPH_ADJACENCY_LIST_HPP #include #include #include #include #include #if !defined BOOST_NO_SLIST # ifdef BOOST_SLIST_HEADER # include BOOST_SLIST_HEADER # else # include # endif #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { //=========================================================================== // Selectors for the VertexList and EdgeList template parameters of // adjacency_list, and the container_gen traits class which is used // to map the selectors to the container type used to implement the // graph. #if !defined BOOST_NO_SLIST struct slistS {}; #endif struct vecS { }; struct listS { }; struct setS { }; struct mapS { }; struct multisetS { }; struct multimapS { }; struct hash_setS { }; struct hash_mapS { }; struct hash_multisetS { }; struct hash_multimapS { }; template struct container_gen { }; template struct container_gen { typedef std::list type; }; #if !defined BOOST_NO_SLIST template struct container_gen { typedef BOOST_STD_EXTENSION_NAMESPACE::slist type; }; #endif template struct container_gen { typedef std::vector type; }; template struct container_gen { typedef std::set type; }; template struct container_gen { typedef std::set type; }; template struct container_gen { typedef std::multiset type; }; template struct container_gen { typedef std::multiset type; }; template struct container_gen { typedef boost::unordered_set type; }; template struct container_gen { typedef boost::unordered_set type; }; template struct container_gen { typedef boost::unordered_multiset type; }; template struct container_gen { typedef boost::unordered_multiset type; }; template struct parallel_edge_traits { }; template <> struct parallel_edge_traits { typedef allow_parallel_edge_tag type; }; template <> struct parallel_edge_traits { typedef allow_parallel_edge_tag type; }; #if !defined BOOST_NO_SLIST template <> struct parallel_edge_traits { typedef allow_parallel_edge_tag type; }; #endif template <> struct parallel_edge_traits { typedef disallow_parallel_edge_tag type; }; template <> struct parallel_edge_traits { typedef allow_parallel_edge_tag type; }; template <> struct parallel_edge_traits { typedef disallow_parallel_edge_tag type; }; // mapS is obsolete, replaced with setS template <> struct parallel_edge_traits { typedef disallow_parallel_edge_tag type; }; template <> struct parallel_edge_traits { typedef disallow_parallel_edge_tag type; }; template <> struct parallel_edge_traits { typedef allow_parallel_edge_tag type; }; template <> struct parallel_edge_traits { typedef allow_parallel_edge_tag type; }; namespace detail { template struct is_random_access { enum { value = false}; typedef mpl::false_ type; }; template <> struct is_random_access { enum { value = true }; typedef mpl::true_ type; }; } // namespace detail template struct is_distributed_selector: mpl::false_ {}; //=========================================================================== // The adjacency_list_traits class, which provides a way to access // some of the associated types of an adjacency_list type without // having to first create the adjacency_list type. This is useful // when trying to create interior vertex or edge properties who's // value type is a vertex or edge descriptor. template struct adjacency_list_traits { typedef typename detail::is_random_access::type is_rand_access; typedef typename DirectedS::is_bidir_t is_bidir; typedef typename DirectedS::is_directed_t is_directed; typedef typename mpl::if_::type >::type directed_category; typedef typename parallel_edge_traits::type edge_parallel_category; typedef std::size_t vertices_size_type; typedef void* vertex_ptr; typedef typename mpl::if_::type vertex_descriptor; typedef detail::edge_desc_impl edge_descriptor; private: // Logic to figure out the edges_size_type struct dummy {}; typedef typename container_gen::type EdgeContainer; typedef typename DirectedS::is_bidir_t BidirectionalT; typedef typename DirectedS::is_directed_t DirectedT; typedef typename mpl::and_::type >::type on_edge_storage; public: typedef typename mpl::if_::type edges_size_type; }; } // namespace boost #include namespace boost { //=========================================================================== // The adjacency_list class. // template class adjacency_list : public detail::adj_list_gen< adjacency_list, VertexListS, OutEdgeListS, DirectedS, VertexProperty, EdgeProperty, GraphProperty, EdgeListS>::type, // Support for named vertices public graph::maybe_named_graph< adjacency_list, typename adjacency_list_traits::vertex_descriptor, VertexProperty> { public: typedef GraphProperty graph_property_type; typedef typename lookup_one_property::type graph_bundled; typedef VertexProperty vertex_property_type; typedef typename lookup_one_property::type vertex_bundled; typedef EdgeProperty edge_property_type; typedef typename lookup_one_property::type edge_bundled; private: typedef adjacency_list self; typedef typename detail::adj_list_gen< self, VertexListS, OutEdgeListS, DirectedS, vertex_property_type, edge_property_type, GraphProperty, EdgeListS >::type Base; public: typedef typename Base::stored_vertex stored_vertex; typedef typename Base::vertices_size_type vertices_size_type; typedef typename Base::edges_size_type edges_size_type; typedef typename Base::degree_size_type degree_size_type; typedef typename Base::vertex_descriptor vertex_descriptor; typedef typename Base::edge_descriptor edge_descriptor; typedef OutEdgeListS out_edge_list_selector; typedef VertexListS vertex_list_selector; typedef DirectedS directed_selector; typedef EdgeListS edge_list_selector; adjacency_list(const GraphProperty& p = GraphProperty()) : m_property(new graph_property_type(p)) { } adjacency_list(const adjacency_list& x) : Base(x), m_property(new graph_property_type(*x.m_property)) { } adjacency_list& operator=(const adjacency_list& x) { // TBD: probably should give the strong guarantee if (&x != this) { Base::operator=(x); // Copy/swap the ptr since we can't just assign it... property_ptr p(new graph_property_type(*x.m_property)); m_property.swap(p); } return *this; } // Required by Mutable Graph adjacency_list(vertices_size_type num_vertices, const GraphProperty& p = GraphProperty()) : Base(num_vertices), m_property(new graph_property_type(p)) { } #if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300 // Required by Iterator Constructible Graph template adjacency_list(EdgeIterator first, EdgeIterator last, vertices_size_type n, edges_size_type = 0, const GraphProperty& p = GraphProperty()) : Base(n, first, last), m_property(new graph_property_type(p)) { } template adjacency_list(EdgeIterator first, EdgeIterator last, EdgePropertyIterator ep_iter, vertices_size_type n, edges_size_type = 0, const GraphProperty& p = GraphProperty()) : Base(n, first, last, ep_iter), m_property(new graph_property_type(p)) { } #endif void swap(adjacency_list& x) { // Is there a more efficient way to do this? adjacency_list tmp(x); x = *this; *this = tmp; } void clear() { this->clearing_graph(); Base::clear(); } #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES // Directly access a vertex or edge bundle vertex_bundled& operator[](vertex_descriptor v) { return get(vertex_bundle, *this)[v]; } const vertex_bundled& operator[](vertex_descriptor v) const { return get(vertex_bundle, *this)[v]; } edge_bundled& operator[](edge_descriptor e) { return get(edge_bundle, *this)[e]; } const edge_bundled& operator[](edge_descriptor e) const { return get(edge_bundle, *this)[e]; } graph_bundled& operator[](graph_bundle_t) { return get_property(*this); } graph_bundled const& operator[](graph_bundle_t) const { return get_property(*this); } #endif // protected: (would be protected if friends were more portable) typedef scoped_ptr property_ptr; property_ptr m_property; }; #define ADJLIST_PARAMS \ typename OEL, typename VL, typename D, typename VP, typename EP, \ typename GP, typename EL #define ADJLIST adjacency_list template inline void set_property(ADJLIST& g, Tag tag, Value const& value) { get_property_value(*g.m_property, tag) = value; } template inline typename graph_property::type& get_property(ADJLIST& g, Tag tag) { return get_property_value(*g.m_property, tag); } template inline typename graph_property::type const& get_property(ADJLIST const& g, Tag tag) { return get_property_value(*g.m_property, tag); } // dwa 09/25/00 - needed to be more explicit so reverse_graph would work. template inline Vertex source(const detail::edge_base& e, const adjacency_list&) { return e.m_source; } template inline Vertex target(const detail::edge_base& e, const adjacency_list&) { return e.m_target; } // Mutability Traits template struct graph_mutability_traits { typedef mutable_property_graph_tag category; }; // Can't remove vertices from adjacency lists with VL==vecS template struct graph_mutability_traits< adjacency_list > { typedef add_only_property_graph_tag category; }; #undef ADJLIST_PARAMS #undef ADJLIST } // namespace boost #endif // BOOST_GRAPH_ADJACENCY_LIST_HPP breadth_first_search.hpp000444000765000024 3472112161110600 24261 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// //======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= // #ifndef BOOST_GRAPH_BREADTH_FIRST_SEARCH_HPP #define BOOST_GRAPH_BREADTH_FIRST_SEARCH_HPP /* Breadth First Search Algorithm (Cormen, Leiserson, and Rivest p. 470) */ #include #include #include #include #include #include #include #include #include #include #include #ifdef BOOST_GRAPH_USE_MPI #include #endif // BOOST_GRAPH_USE_MPI namespace boost { template struct BFSVisitorConcept { void constraints() { BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.initialize_vertex(u, g); vis.discover_vertex(u, g); vis.examine_vertex(u, g); vis.examine_edge(e, g); vis.tree_edge(e, g); vis.non_tree_edge(e, g); vis.gray_target(e, g); vis.black_target(e, g); vis.finish_vertex(u, g); } Visitor vis; Graph g; typename graph_traits::vertex_descriptor u; typename graph_traits::edge_descriptor e; }; // Multiple-source version template void breadth_first_visit (const IncidenceGraph& g, SourceIterator sources_begin, SourceIterator sources_end, Buffer& Q, BFSVisitor vis, ColorMap color) { BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); typedef graph_traits GTraits; typedef typename GTraits::vertex_descriptor Vertex; typedef typename GTraits::edge_descriptor Edge; BOOST_CONCEPT_ASSERT(( BFSVisitorConcept )); BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type ColorValue; typedef color_traits Color; typename GTraits::out_edge_iterator ei, ei_end; for (; sources_begin != sources_end; ++sources_begin) { Vertex s = *sources_begin; put(color, s, Color::gray()); vis.discover_vertex(s, g); Q.push(s); } while (! Q.empty()) { Vertex u = Q.top(); Q.pop(); vis.examine_vertex(u, g); for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) { Vertex v = target(*ei, g); vis.examine_edge(*ei, g); ColorValue v_color = get(color, v); if (v_color == Color::white()) { vis.tree_edge(*ei, g); put(color, v, Color::gray()); vis.discover_vertex(v, g); Q.push(v); } else { vis.non_tree_edge(*ei, g); if (v_color == Color::gray()) vis.gray_target(*ei, g); else vis.black_target(*ei, g); } } // end for put(color, u, Color::black()); vis.finish_vertex(u, g); } // end while } // breadth_first_visit // Single-source version template void breadth_first_visit (const IncidenceGraph& g, typename graph_traits::vertex_descriptor s, Buffer& Q, BFSVisitor vis, ColorMap color) { typename graph_traits::vertex_descriptor sources[1] = {s}; breadth_first_visit(g, sources, sources + 1, Q, vis, color); } template void breadth_first_search (const VertexListGraph& g, SourceIterator sources_begin, SourceIterator sources_end, Buffer& Q, BFSVisitor vis, ColorMap color) { // Initialization typedef typename property_traits::value_type ColorValue; typedef color_traits Color; typename boost::graph_traits::vertex_iterator i, i_end; for (boost::tie(i, i_end) = vertices(g); i != i_end; ++i) { vis.initialize_vertex(*i, g); put(color, *i, Color::white()); } breadth_first_visit(g, sources_begin, sources_end, Q, vis, color); } template void breadth_first_search (const VertexListGraph& g, typename graph_traits::vertex_descriptor s, Buffer& Q, BFSVisitor vis, ColorMap color) { typename graph_traits::vertex_descriptor sources[1] = {s}; breadth_first_search(g, sources, sources + 1, Q, vis, color); } namespace graph { struct bfs_visitor_event_not_overridden {}; } template class bfs_visitor { public: bfs_visitor() { } bfs_visitor(Visitors vis) : m_vis(vis) { } template graph::bfs_visitor_event_not_overridden initialize_vertex(Vertex u, Graph& g) { invoke_visitors(m_vis, u, g, ::boost::on_initialize_vertex()); return graph::bfs_visitor_event_not_overridden(); } template graph::bfs_visitor_event_not_overridden discover_vertex(Vertex u, Graph& g) { invoke_visitors(m_vis, u, g, ::boost::on_discover_vertex()); return graph::bfs_visitor_event_not_overridden(); } template graph::bfs_visitor_event_not_overridden examine_vertex(Vertex u, Graph& g) { invoke_visitors(m_vis, u, g, ::boost::on_examine_vertex()); return graph::bfs_visitor_event_not_overridden(); } template graph::bfs_visitor_event_not_overridden examine_edge(Edge e, Graph& g) { invoke_visitors(m_vis, e, g, ::boost::on_examine_edge()); return graph::bfs_visitor_event_not_overridden(); } template graph::bfs_visitor_event_not_overridden tree_edge(Edge e, Graph& g) { invoke_visitors(m_vis, e, g, ::boost::on_tree_edge()); return graph::bfs_visitor_event_not_overridden(); } template graph::bfs_visitor_event_not_overridden non_tree_edge(Edge e, Graph& g) { invoke_visitors(m_vis, e, g, ::boost::on_non_tree_edge()); return graph::bfs_visitor_event_not_overridden(); } template graph::bfs_visitor_event_not_overridden gray_target(Edge e, Graph& g) { invoke_visitors(m_vis, e, g, ::boost::on_gray_target()); return graph::bfs_visitor_event_not_overridden(); } template graph::bfs_visitor_event_not_overridden black_target(Edge e, Graph& g) { invoke_visitors(m_vis, e, g, ::boost::on_black_target()); return graph::bfs_visitor_event_not_overridden(); } template graph::bfs_visitor_event_not_overridden finish_vertex(Vertex u, Graph& g) { invoke_visitors(m_vis, u, g, ::boost::on_finish_vertex()); return graph::bfs_visitor_event_not_overridden(); } BOOST_GRAPH_EVENT_STUB(on_initialize_vertex,bfs) BOOST_GRAPH_EVENT_STUB(on_discover_vertex,bfs) BOOST_GRAPH_EVENT_STUB(on_examine_vertex,bfs) BOOST_GRAPH_EVENT_STUB(on_examine_edge,bfs) BOOST_GRAPH_EVENT_STUB(on_tree_edge,bfs) BOOST_GRAPH_EVENT_STUB(on_non_tree_edge,bfs) BOOST_GRAPH_EVENT_STUB(on_gray_target,bfs) BOOST_GRAPH_EVENT_STUB(on_black_target,bfs) BOOST_GRAPH_EVENT_STUB(on_finish_vertex,bfs) protected: Visitors m_vis; }; template bfs_visitor make_bfs_visitor(Visitors vis) { return bfs_visitor(vis); } typedef bfs_visitor<> default_bfs_visitor; namespace detail { template void bfs_helper (VertexListGraph& g, typename graph_traits::vertex_descriptor s, ColorMap color, BFSVisitor vis, const bgl_named_params& params, BOOST_GRAPH_ENABLE_IF_MODELS(VertexListGraph, vertex_list_graph_tag, void)* = 0) { typedef graph_traits Traits; // Buffer default typedef typename Traits::vertex_descriptor Vertex; typedef boost::queue queue_t; queue_t Q; breadth_first_search (g, s, choose_param(get_param(params, buffer_param_t()), boost::ref(Q)).get(), vis, color); } #ifdef BOOST_GRAPH_USE_MPI template void bfs_helper (DistributedGraph& g, typename graph_traits::vertex_descriptor s, ColorMap color, BFSVisitor vis, const bgl_named_params& params, BOOST_GRAPH_ENABLE_IF_MODELS(DistributedGraph, distributed_graph_tag, void)* = 0); #endif // BOOST_GRAPH_USE_MPI //------------------------------------------------------------------------- // Choose between default color and color parameters. Using // function dispatching so that we don't require vertex index if // the color default is not being used. template struct bfs_dispatch { template static void apply (VertexListGraph& g, typename graph_traits::vertex_descriptor s, const bgl_named_params& params, ColorMap color) { bfs_helper (g, s, color, choose_param(get_param(params, graph_visitor), make_bfs_visitor(null_visitor())), params); } }; template <> struct bfs_dispatch { template static void apply (VertexListGraph& g, typename graph_traits::vertex_descriptor s, const bgl_named_params& params, param_not_found) { null_visitor null_vis; bfs_helper (g, s, make_two_bit_color_map (num_vertices(g), choose_const_pmap(get_param(params, vertex_index), g, vertex_index)), choose_param(get_param(params, graph_visitor), make_bfs_visitor(null_vis)), params); } }; } // namespace detail #if 1 // Named Parameter Variant template void breadth_first_search (const VertexListGraph& g, typename graph_traits::vertex_descriptor s, const bgl_named_params& params) { // The graph is passed by *const* reference so that graph adaptors // (temporaries) can be passed into this function. However, the // graph is not really const since we may write to property maps // of the graph. VertexListGraph& ng = const_cast(g); typedef typename get_param_type< vertex_color_t, bgl_named_params >::type C; detail::bfs_dispatch::apply(ng, s, params, get_param(params, vertex_color)); } #endif // This version does not initialize colors, user has to. template void breadth_first_visit (const IncidenceGraph& g, typename graph_traits::vertex_descriptor s, const bgl_named_params& params) { // The graph is passed by *const* reference so that graph adaptors // (temporaries) can be passed into this function. However, the // graph is not really const since we may write to property maps // of the graph. IncidenceGraph& ng = const_cast(g); typedef graph_traits Traits; // Buffer default typedef typename Traits::vertex_descriptor vertex_descriptor; typedef boost::queue queue_t; queue_t Q; breadth_first_visit (ng, s, choose_param(get_param(params, buffer_param_t()), boost::ref(Q)).get(), choose_param(get_param(params, graph_visitor), make_bfs_visitor(null_visitor())), choose_pmap(get_param(params, vertex_color), ng, vertex_color) ); } namespace graph { namespace detail { template struct breadth_first_search_impl { typedef void result_type; template void operator()(const Graph& g, const Source& source, const ArgPack& arg_pack) { using namespace boost::graph::keywords; typename boost::graph_traits::vertex_descriptor sources[1] = {source}; boost::queue::vertex_descriptor> Q; boost::breadth_first_search(g, &sources[0], &sources[1], boost::unwrap_ref(arg_pack[_buffer | boost::ref(Q)]), arg_pack[_visitor | make_bfs_visitor(null_visitor())], boost::detail::make_color_map_from_arg_pack(g, arg_pack)); } }; } BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(breadth_first_search, 2, 4) } #if 0 // Named Parameter Variant BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(breadth_first_search, 2) #endif } // namespace boost #ifdef BOOST_GRAPH_USE_MPI # include #endif #endif // BOOST_GRAPH_BREADTH_FIRST_SEARCH_HPP buffer_concepts.hpp000444000765000024 463012161110614 23244 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// Copyright Daniel Trebbien 2010. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or the copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GRAPH_BUFFER_CONCEPTS_HPP #define BOOST_GRAPH_BUFFER_CONCEPTS_HPP 1 #include #include #include #include #include #include #include namespace boost { BOOST_concept(Buffer, (B)) { typedef typename B::value_type value_type; typedef typename B::size_type size_type; BOOST_CONCEPT_USAGE(Buffer) { typedef typename boost::add_reference::type reference; BOOST_CONCEPT_ASSERT((Assignable)); buf.push(g_ct); buf.pop(); reference t = buf.top(); boost::ignore_unused_variable_warning(t); } void const_constraints(const B& cbuf) { typedef typename boost::add_const::type>::type& const_reference; const_reference ct = cbuf.top(); s = cbuf.size(); if (cbuf.empty()) dummy = __LINE__; } int dummy; static const value_type g_ct; size_type s; B buf; }; BOOST_concept(UpdatableQueue, (Q)) : Buffer { BOOST_CONCEPT_USAGE(UpdatableQueue) { q.update(g_ct); } void const_constraints(const Q& cq) { if (cq.contains(g_ct)) dummy = __LINE__; } int dummy; static const typename Buffer::value_type g_ct; Q q; }; BOOST_concept(KeyedUpdatableQueue, (Q)) : UpdatableQueue { typedef typename Q::key_type key_type; typedef typename Q::key_map key_map; BOOST_CONCEPT_USAGE(KeyedUpdatableQueue) { BOOST_CONCEPT_ASSERT((boost::ReadWritePropertyMapConcept::value_type>)); } void const_constraints(const Q& cq) { km = cq.keys(); k = get(km, g_ct); } static const typename Buffer::value_type g_ct; key_type k; key_map km; Q q; }; } // end `namespace boost` #endif // !BOOST_GRAPH_BUFFER_CONCEPTS_HPP dijkstra_shortest_paths.hpp000444000765000024 4604112161110702 25062 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= // // // Revision History: // 04 April 2001: Added named parameter variant. (Jeremy Siek) // 01 April 2001: Modified to use new header. (JMaddock) // #ifndef BOOST_GRAPH_DIJKSTRA_HPP #define BOOST_GRAPH_DIJKSTRA_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef BOOST_GRAPH_DIJKSTRA_TESTING # include #endif // BOOST_GRAPH_DIJKSTRA_TESTING namespace boost { /** * @brief Updates a particular value in a queue used by Dijkstra's * algorithm. * * This routine is called by Dijkstra's algorithm after it has * decreased the distance from the source vertex to the given @p * vertex. By default, this routine will just call @c * Q.update(vertex). However, other queues may provide more * specialized versions of this routine. * * @param Q the queue that will be updated. * @param vertex the vertex whose distance has been updated * @param old_distance the previous distance to @p vertex */ template inline void dijkstra_queue_update(Buffer& Q, Vertex vertex, DistanceType old_distance) { (void)old_distance; Q.update(vertex); } #ifdef BOOST_GRAPH_DIJKSTRA_TESTING // This is a misnomer now: it now just refers to the "default heap", which is // currently d-ary (d=4) but can be changed by a #define. static bool dijkstra_relaxed_heap = true; #endif template struct DijkstraVisitorConcept { void constraints() { BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.initialize_vertex(u, g); vis.discover_vertex(u, g); vis.examine_vertex(u, g); vis.examine_edge(e, g); vis.edge_relaxed(e, g); vis.edge_not_relaxed(e, g); vis.finish_vertex(u, g); } Visitor vis; Graph g; typename graph_traits::vertex_descriptor u; typename graph_traits::edge_descriptor e; }; template class dijkstra_visitor : public bfs_visitor { public: dijkstra_visitor() { } dijkstra_visitor(Visitors vis) : bfs_visitor(vis) { } template void edge_relaxed(Edge e, Graph& g) { invoke_visitors(this->m_vis, e, g, on_edge_relaxed()); } template void edge_not_relaxed(Edge e, Graph& g) { invoke_visitors(this->m_vis, e, g, on_edge_not_relaxed()); } private: template void tree_edge(Edge u, Graph& g) { } }; template dijkstra_visitor make_dijkstra_visitor(Visitors vis) { return dijkstra_visitor(vis); } typedef dijkstra_visitor<> default_dijkstra_visitor; namespace detail { template struct dijkstra_bfs_visitor { typedef typename property_traits::value_type D; dijkstra_bfs_visitor(UniformCostVisitor vis, UpdatableQueue& Q, WeightMap w, PredecessorMap p, DistanceMap d, BinaryFunction combine, BinaryPredicate compare, D zero) : m_vis(vis), m_Q(Q), m_weight(w), m_predecessor(p), m_distance(d), m_combine(combine), m_compare(compare), m_zero(zero) { } template void tree_edge(Edge e, Graph& g) { bool decreased = relax(e, g, m_weight, m_predecessor, m_distance, m_combine, m_compare); if (decreased) m_vis.edge_relaxed(e, g); else m_vis.edge_not_relaxed(e, g); } template void gray_target(Edge e, Graph& g) { D old_distance = get(m_distance, target(e, g)); bool decreased = relax(e, g, m_weight, m_predecessor, m_distance, m_combine, m_compare); if (decreased) { dijkstra_queue_update(m_Q, target(e, g), old_distance); m_vis.edge_relaxed(e, g); } else m_vis.edge_not_relaxed(e, g); } template void initialize_vertex(Vertex u, Graph& g) { m_vis.initialize_vertex(u, g); } template void non_tree_edge(Edge, Graph&) { } template void discover_vertex(Vertex u, Graph& g) { m_vis.discover_vertex(u, g); } template void examine_vertex(Vertex u, Graph& g) { m_vis.examine_vertex(u, g); } template void examine_edge(Edge e, Graph& g) { if (m_compare(get(m_weight, e), m_zero)) boost::throw_exception(negative_edge()); m_vis.examine_edge(e, g); } template void black_target(Edge, Graph&) { } template void finish_vertex(Vertex u, Graph& g) { m_vis.finish_vertex(u, g); } UniformCostVisitor m_vis; UpdatableQueue& m_Q; WeightMap m_weight; PredecessorMap m_predecessor; DistanceMap m_distance; BinaryFunction m_combine; BinaryPredicate m_compare; D m_zero; }; } // namespace detail namespace detail { template struct vertex_property_map_generator_helper {}; template struct vertex_property_map_generator_helper { typedef boost::iterator_property_map type; static type build(const Graph& g, const IndexMap& index, boost::scoped_array& array_holder) { array_holder.reset(new Value[num_vertices(g)]); std::fill(array_holder.get(), array_holder.get() + num_vertices(g), Value()); return make_iterator_property_map(array_holder.get(), index); } }; template struct vertex_property_map_generator_helper { typedef boost::vector_property_map type; static type build(const Graph& g, const IndexMap& index, boost::scoped_array& array_holder) { return boost::make_vector_property_map(index); } }; template struct vertex_property_map_generator { typedef boost::is_base_and_derived< boost::vertex_list_graph_tag, typename boost::graph_traits::traversal_category> known_num_vertices; typedef vertex_property_map_generator_helper helper; typedef typename helper::type type; static type build(const Graph& g, const IndexMap& index, boost::scoped_array& array_holder) { return helper::build(g, index, array_holder); } }; } namespace detail { template struct default_color_map_generator_helper {}; template struct default_color_map_generator_helper { typedef boost::two_bit_color_map type; static type build(const Graph& g, const IndexMap& index) { size_t nv = num_vertices(g); return boost::two_bit_color_map(nv, index); } }; template struct default_color_map_generator_helper { typedef boost::vector_property_map type; static type build(const Graph& g, const IndexMap& index) { return boost::make_vector_property_map(index); } }; template struct default_color_map_generator { typedef boost::is_base_and_derived< boost::vertex_list_graph_tag, typename boost::graph_traits::traversal_category> known_num_vertices; typedef default_color_map_generator_helper helper; typedef typename helper::type type; static type build(const Graph& g, const IndexMap& index) { return helper::build(g, index); } }; } // Call breadth first search with default color map. template inline void dijkstra_shortest_paths_no_init (const Graph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight, IndexMap index_map, Compare compare, Combine combine, DistZero zero, DijkstraVisitor vis) { typedef detail::default_color_map_generator ColorMapHelper; typedef typename ColorMapHelper::type ColorMap; ColorMap color = ColorMapHelper::build(g, index_map); dijkstra_shortest_paths_no_init( g, s, predecessor, distance, weight, index_map, compare, combine, zero, vis, color); } // Call breadth first search template inline void dijkstra_shortest_paths_no_init (const Graph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight, IndexMap index_map, Compare compare, Combine combine, DistZero zero, DijkstraVisitor vis, ColorMap color) { typedef indirect_cmp IndirectCmp; IndirectCmp icmp(distance, compare); typedef typename graph_traits::vertex_descriptor Vertex; #ifdef BOOST_GRAPH_DIJKSTRA_TESTING if (!dijkstra_relaxed_heap) { typedef mutable_queue, IndirectCmp, IndexMap> MutableQueue; MutableQueue Q(num_vertices(g), icmp, index_map); detail::dijkstra_bfs_visitor bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, zero); breadth_first_visit(g, s, Q, bfs_vis, color); return; } #endif // BOOST_GRAPH_DIJKSTRA_TESTING #ifdef BOOST_GRAPH_DIJKSTRA_USE_RELAXED_HEAP typedef relaxed_heap MutableQueue; MutableQueue Q(num_vertices(g), icmp, index_map); #else // Now the default: use a d-ary heap boost::scoped_array index_in_heap_map_holder; typedef detail::vertex_property_map_generator IndexInHeapMapHelper; typedef typename IndexInHeapMapHelper::type IndexInHeapMap; IndexInHeapMap index_in_heap = IndexInHeapMapHelper::build(g, index_map, index_in_heap_map_holder); typedef d_ary_heap_indirect MutableQueue; MutableQueue Q(distance, index_in_heap, compare); #endif // Relaxed heap detail::dijkstra_bfs_visitor bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, zero); breadth_first_visit(g, s, Q, bfs_vis, color); } // Initialize distances and call breadth first search with default color map template inline void dijkstra_shortest_paths (const VertexListGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight, IndexMap index_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis, const bgl_named_params& BOOST_GRAPH_ENABLE_IF_MODELS_PARM(VertexListGraph,vertex_list_graph_tag)) { boost::two_bit_color_map color(num_vertices(g), index_map); dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map, compare, combine, inf, zero, vis, color); } // Initialize distances and call breadth first search template inline void dijkstra_shortest_paths (const VertexListGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight, IndexMap index_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis, ColorMap color) { typedef typename property_traits::value_type ColorValue; typedef color_traits Color; typename graph_traits::vertex_iterator ui, ui_end; for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) { vis.initialize_vertex(*ui, g); put(distance, *ui, inf); put(predecessor, *ui, *ui); put(color, *ui, Color::white()); } put(distance, s, zero); dijkstra_shortest_paths_no_init(g, s, predecessor, distance, weight, index_map, compare, combine, zero, vis, color); } // Initialize distances and call breadth first search template inline void dijkstra_shortest_paths (const VertexListGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight, IndexMap index_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map, compare, combine, inf, zero, vis, no_named_parameters()); } namespace detail { // Handle defaults for PredecessorMap and // Distance Compare, Combine, Inf and Zero template inline void dijkstra_dispatch2 (const VertexListGraph& g, typename graph_traits::vertex_descriptor s, DistanceMap distance, WeightMap weight, IndexMap index_map, const Params& params) { // Default for predecessor map dummy_property_map p_map; typedef typename property_traits::value_type D; D inf = choose_param(get_param(params, distance_inf_t()), (std::numeric_limits::max)()); dijkstra_shortest_paths (g, s, choose_param(get_param(params, vertex_predecessor), p_map), distance, weight, index_map, choose_param(get_param(params, distance_compare_t()), std::less()), choose_param(get_param(params, distance_combine_t()), closed_plus(inf)), inf, choose_param(get_param(params, distance_zero_t()), D()), choose_param(get_param(params, graph_visitor), make_dijkstra_visitor(null_visitor())), params); } template inline void dijkstra_dispatch1 (const VertexListGraph& g, typename graph_traits::vertex_descriptor s, DistanceMap distance, WeightMap weight, IndexMap index_map, const Params& params) { // Default for distance map typedef typename property_traits::value_type D; typename std::vector::size_type n = is_default_param(distance) ? num_vertices(g) : 1; std::vector distance_map(n); detail::dijkstra_dispatch2 (g, s, choose_param(distance, make_iterator_property_map (distance_map.begin(), index_map, distance_map[0])), weight, index_map, params); } } // namespace detail // Named Parameter Variant template inline void dijkstra_shortest_paths (const VertexListGraph& g, typename graph_traits::vertex_descriptor s, const bgl_named_params& params) { // Default for edge weight and vertex index map is to ask for them // from the graph. Default for the visitor is null_visitor. detail::dijkstra_dispatch1 (g, s, get_param(params, vertex_distance), choose_const_pmap(get_param(params, edge_weight), g, edge_weight), choose_const_pmap(get_param(params, vertex_index), g, vertex_index), params); } } // namespace boost #ifdef BOOST_GRAPH_USE_MPI # include #endif #endif // BOOST_GRAPH_DIJKSTRA_HPP exception.hpp000444000765000024 302612161110607 22073 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 2002 Indiana University. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_EXCEPTION_HPP #define BOOST_GRAPH_EXCEPTION_HPP #include #include namespace boost { struct bad_graph : public std::invalid_argument { bad_graph(const std::string& what_arg) : std::invalid_argument(what_arg) { } }; struct not_a_dag : public bad_graph { not_a_dag() : bad_graph("The graph must be a DAG.") { } }; struct negative_edge : public bad_graph { negative_edge() : bad_graph("The graph may not contain an edge with negative weight.") { } }; struct negative_cycle : public bad_graph { negative_cycle() : bad_graph("The graph may not contain negative cycles.") { } }; struct not_connected : public bad_graph { not_connected() : bad_graph("The graph must be connected.") { } }; struct not_complete : public bad_graph { not_complete() : bad_graph("The graph must be complete.") { } }; } // namespace boost #endif // BOOST_GRAPH_EXCEPTION_HPP graph_concepts.hpp000444000765000024 5223512161110641 23120 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// //======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Copyright 2009, Andrew Sutton // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= // #ifndef BOOST_GRAPH_CONCEPTS_HPP #define BOOST_GRAPH_CONCEPTS_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if // you want to use vector_as_graph, it is! I'm sure the graph // library leaves these out all over the place. Probably a // redesign involving specializing a template with a static // member function is in order :( // // It is needed in order to allow us to write using boost::vertices as // needed for ADL when using vector_as_graph below. #if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) \ && !BOOST_WORKAROUND(__GNUC__, <= 2) \ && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) # define BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK #endif #ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK template typename T::ThereReallyIsNoMemberByThisNameInT vertices(T const&); #endif namespace concepts { BOOST_concept(MultiPassInputIterator,(T)) { BOOST_CONCEPT_USAGE(MultiPassInputIterator) { BOOST_CONCEPT_ASSERT((InputIterator)); } }; BOOST_concept(Graph,(G)) { typedef typename graph_traits::vertex_descriptor vertex_descriptor; typedef typename graph_traits::edge_descriptor edge_descriptor; typedef typename graph_traits::directed_category directed_category; typedef typename graph_traits::edge_parallel_category edge_parallel_category; typedef typename graph_traits::traversal_category traversal_category; BOOST_CONCEPT_USAGE(Graph) { BOOST_CONCEPT_ASSERT((DefaultConstructible)); BOOST_CONCEPT_ASSERT((EqualityComparable)); BOOST_CONCEPT_ASSERT((Assignable)); } G g; }; BOOST_concept(IncidenceGraph,(G)) : Graph { typedef typename graph_traits::edge_descriptor edge_descriptor; typedef typename graph_traits::out_edge_iterator out_edge_iterator; typedef typename graph_traits::degree_size_type degree_size_type; typedef typename graph_traits::traversal_category traversal_category; BOOST_STATIC_ASSERT((boost::mpl::not_ >::value)); BOOST_STATIC_ASSERT((boost::mpl::not_ >::value)); BOOST_CONCEPT_USAGE(IncidenceGraph) { BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); BOOST_CONCEPT_ASSERT((DefaultConstructible)); BOOST_CONCEPT_ASSERT((EqualityComparable)); BOOST_CONCEPT_ASSERT((Assignable)); BOOST_CONCEPT_ASSERT((Convertible)); p = out_edges(u, g); n = out_degree(u, g); e = *p.first; u = source(e, g); v = target(e, g); const_constraints(g); } void const_constraints(const G& cg) { p = out_edges(u, cg); n = out_degree(u, cg); e = *p.first; u = source(e, cg); v = target(e, cg); } std::pair p; typename graph_traits::vertex_descriptor u, v; typename graph_traits::edge_descriptor e; typename graph_traits::degree_size_type n; G g; }; BOOST_concept(BidirectionalGraph,(G)) : IncidenceGraph { typedef typename graph_traits::in_edge_iterator in_edge_iterator; typedef typename graph_traits::traversal_category traversal_category; BOOST_CONCEPT_USAGE(BidirectionalGraph) { BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); BOOST_CONCEPT_ASSERT((Convertible)); BOOST_STATIC_ASSERT((boost::mpl::not_ >::value)); p = in_edges(v, g); n = in_degree(v, g); e = *p.first; const_constraints(g); } void const_constraints(const G& cg) { p = in_edges(v, cg); n = in_degree(v, cg); e = *p.first; } std::pair p; typename graph_traits::vertex_descriptor v; typename graph_traits::edge_descriptor e; typename graph_traits::degree_size_type n; G g; }; BOOST_concept(AdjacencyGraph,(G)) : Graph { typedef typename graph_traits::adjacency_iterator adjacency_iterator; typedef typename graph_traits::traversal_category traversal_category; BOOST_CONCEPT_USAGE(AdjacencyGraph) { BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); BOOST_CONCEPT_ASSERT((Convertible)); BOOST_STATIC_ASSERT((boost::mpl::not_ >::value)); p = adjacent_vertices(v, g); v = *p.first; const_constraints(g); } void const_constraints(const G& cg) { p = adjacent_vertices(v, cg); } std::pair p; typename graph_traits::vertex_descriptor v; G g; }; BOOST_concept(VertexListGraph,(G)) : Graph { typedef typename graph_traits::vertex_iterator vertex_iterator; typedef typename graph_traits::vertices_size_type vertices_size_type; typedef typename graph_traits::traversal_category traversal_category; BOOST_CONCEPT_USAGE(VertexListGraph) { BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); BOOST_CONCEPT_ASSERT((Convertible)); BOOST_STATIC_ASSERT((boost::mpl::not_ >::value)); BOOST_STATIC_ASSERT((boost::mpl::not_ >::value)); #ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if // you want to use vector_as_graph, it is! I'm sure the graph // library leaves these out all over the place. Probably a // redesign involving specializing a template with a static // member function is in order :( using boost::vertices; #endif p = vertices(g); v = *p.first; const_constraints(g); } void const_constraints(const G& cg) { #ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if // you want to use vector_as_graph, it is! I'm sure the graph // library leaves these out all over the place. Probably a // redesign involving specializing a template with a static // member function is in order :( using boost::vertices; #endif p = vertices(cg); v = *p.first; V = num_vertices(cg); } std::pair p; typename graph_traits::vertex_descriptor v; G g; vertices_size_type V; }; BOOST_concept(EdgeListGraph,(G)) : Graph { typedef typename graph_traits::edge_descriptor edge_descriptor; typedef typename graph_traits::edge_iterator edge_iterator; typedef typename graph_traits::edges_size_type edges_size_type; typedef typename graph_traits::traversal_category traversal_category; BOOST_CONCEPT_USAGE(EdgeListGraph) { BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); BOOST_CONCEPT_ASSERT((DefaultConstructible)); BOOST_CONCEPT_ASSERT((EqualityComparable)); BOOST_CONCEPT_ASSERT((Assignable)); BOOST_CONCEPT_ASSERT((Convertible)); BOOST_STATIC_ASSERT((boost::mpl::not_ >::value)); BOOST_STATIC_ASSERT((boost::mpl::not_ >::value)); p = edges(g); e = *p.first; u = source(e, g); v = target(e, g); const_constraints(g); } void const_constraints(const G& cg) { p = edges(cg); E = num_edges(cg); e = *p.first; u = source(e, cg); v = target(e, cg); } std::pair p; typename graph_traits::vertex_descriptor u, v; typename graph_traits::edge_descriptor e; edges_size_type E; G g; }; BOOST_concept(VertexAndEdgeListGraph,(G)) : VertexListGraph , EdgeListGraph { }; // Where to put the requirement for this constructor? // G g(n_vertices); // Not in mutable graph, then LEDA graph's can't be models of // MutableGraph. BOOST_concept(EdgeMutableGraph,(G)) { typedef typename graph_traits::edge_descriptor edge_descriptor; BOOST_CONCEPT_USAGE(EdgeMutableGraph) { p = add_edge(u, v, g); remove_edge(u, v, g); remove_edge(e, g); clear_vertex(v, g); } G g; edge_descriptor e; std::pair p; typename graph_traits::vertex_descriptor u, v; }; BOOST_concept(VertexMutableGraph,(G)) { BOOST_CONCEPT_USAGE(VertexMutableGraph) { v = add_vertex(g); remove_vertex(v, g); } G g; typename graph_traits::vertex_descriptor u, v; }; BOOST_concept(MutableGraph,(G)) : EdgeMutableGraph , VertexMutableGraph { }; template struct dummy_edge_predicate { bool operator()(const edge_descriptor&) const { return false; } }; BOOST_concept(MutableIncidenceGraph,(G)) : MutableGraph { BOOST_CONCEPT_USAGE(MutableIncidenceGraph) { remove_edge(iter, g); remove_out_edge_if(u, p, g); } G g; typedef typename graph_traits::edge_descriptor edge_descriptor; dummy_edge_predicate p; typename boost::graph_traits::vertex_descriptor u; typename boost::graph_traits::out_edge_iterator iter; }; BOOST_concept(MutableBidirectionalGraph,(G)) : MutableIncidenceGraph { BOOST_CONCEPT_USAGE(MutableBidirectionalGraph) { remove_in_edge_if(u, p, g); } G g; typedef typename graph_traits::edge_descriptor edge_descriptor; dummy_edge_predicate p; typename boost::graph_traits::vertex_descriptor u; }; BOOST_concept(MutableEdgeListGraph,(G)) : EdgeMutableGraph { BOOST_CONCEPT_USAGE(MutableEdgeListGraph) { remove_edge_if(p, g); } G g; typedef typename graph_traits::edge_descriptor edge_descriptor; dummy_edge_predicate p; }; BOOST_concept(VertexMutablePropertyGraph,(G)) : VertexMutableGraph { BOOST_CONCEPT_USAGE(VertexMutablePropertyGraph) { v = add_vertex(vp, g); } G g; typename graph_traits::vertex_descriptor v; typename vertex_property_type::type vp; }; BOOST_concept(EdgeMutablePropertyGraph,(G)) : EdgeMutableGraph { typedef typename graph_traits::edge_descriptor edge_descriptor; BOOST_CONCEPT_USAGE(EdgeMutablePropertyGraph) { p = add_edge(u, v, ep, g); } G g; std::pair p; typename graph_traits::vertex_descriptor u, v; typename edge_property_type::type ep; }; BOOST_concept(AdjacencyMatrix,(G)) : Graph { typedef typename graph_traits::edge_descriptor edge_descriptor; BOOST_CONCEPT_USAGE(AdjacencyMatrix) { p = edge(u, v, g); const_constraints(g); } void const_constraints(const G& cg) { p = edge(u, v, cg); } typename graph_traits::vertex_descriptor u, v; std::pair p; G g; }; BOOST_concept(ReadablePropertyGraph,(G)(X)(Property)) : Graph { typedef typename property_map::const_type const_Map; BOOST_CONCEPT_USAGE(ReadablePropertyGraph) { BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept)); const_constraints(g); } void const_constraints(const G& cg) { const_Map pmap = get(Property(), cg); pval = get(Property(), cg, x); ignore_unused_variable_warning(pmap); } G g; X x; typename property_traits::value_type pval; }; BOOST_concept(PropertyGraph,(G)(X)(Property)) : ReadablePropertyGraph { typedef typename property_map::type Map; BOOST_CONCEPT_USAGE(PropertyGraph) { BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept)); Map pmap = get(Property(), g); pval = get(Property(), g, x); put(Property(), g, x, pval); ignore_unused_variable_warning(pmap); } G g; X x; typename property_traits::value_type pval; }; BOOST_concept(LvaluePropertyGraph,(G)(X)(Property)) : ReadablePropertyGraph { typedef typename property_map::type Map; typedef typename property_map::const_type const_Map; BOOST_CONCEPT_USAGE(LvaluePropertyGraph) { BOOST_CONCEPT_ASSERT((LvaluePropertyMapConcept)); pval = get(Property(), g, x); put(Property(), g, x, pval); } G g; X x; typename property_traits::value_type pval; }; // The *IndexGraph concepts are "semantic" graph concpepts. These can be // applied to describe any graph that has an index map that can be accessed // using the get(*_index, g) method. For example, adjacency lists with // VertexSet == vecS are implicitly models of this concept. // // NOTE: We could require an associated type vertex_index_type, but that // would mean propagating that type name into graph_traits and all of the // other graph implementations. Much easier to simply call it unsigned. BOOST_concept(VertexIndexGraph,(Graph)) { BOOST_CONCEPT_USAGE(VertexIndexGraph) { typedef typename graph_traits::vertex_descriptor Vertex; typedef typename property_map::type Map; typedef unsigned Index; // This could be Graph::vertex_index_type Map m = get(vertex_index, g); Index x = get(vertex_index, g, Vertex()); ignore_unused_variable_warning(m); ignore_unused_variable_warning(x); // This is relaxed renumber_vertex_indices(g); const_constraints(g); } void const_constraints(const Graph& g) { typedef typename property_map::const_type Map; Map m = get(vertex_index, g); ignore_unused_variable_warning(m); } private: Graph g; }; BOOST_concept(EdgeIndexGraph,(Graph)) { BOOST_CONCEPT_USAGE(EdgeIndexGraph) { typedef typename graph_traits::edge_descriptor Edge; typedef typename property_map::type Map; typedef unsigned Index; // This could be Graph::vertex_index_type Map m = get(edge_index, g); Index x = get(edge_index, g, Edge()); ignore_unused_variable_warning(m); ignore_unused_variable_warning(x); // This is relaxed renumber_edge_indices(g); const_constraints(g); } void const_constraints(const Graph& g) { typedef typename property_map::const_type Map; Map m = get(edge_index, g); ignore_unused_variable_warning(m); } private: Graph g; }; BOOST_concept(ColorValue,(C)) : EqualityComparable , DefaultConstructible { BOOST_CONCEPT_USAGE(ColorValue) { c = color_traits::white(); c = color_traits::gray(); c = color_traits::black(); } C c; }; BOOST_concept(BasicMatrix,(M)(I)(V)) { BOOST_CONCEPT_USAGE(BasicMatrix) { V& elt = A[i][j]; const_constraints(A); ignore_unused_variable_warning(elt); } void const_constraints(const M& cA) { const V& elt = cA[i][j]; ignore_unused_variable_warning(elt); } M A; I i, j; }; // The following concepts describe aspects of numberic values and measure // functions. We're extending the notion of numeric values to include // emulation for zero and infinity. BOOST_concept(NumericValue,(Numeric)) { BOOST_CONCEPT_USAGE(NumericValue) { BOOST_CONCEPT_ASSERT(( DefaultConstructible )); BOOST_CONCEPT_ASSERT(( CopyConstructible )); numeric_values::zero(); numeric_values::infinity(); } }; BOOST_concept(DegreeMeasure,(Measure)(Graph)) { BOOST_CONCEPT_USAGE(DegreeMeasure) { typedef typename Measure::degree_type Degree; typedef typename Measure::vertex_type Vertex; Degree d = m(Vertex(), g); ignore_unused_variable_warning(d); } private: Measure m; Graph g; }; BOOST_concept(DistanceMeasure,(Measure)(Graph)) { BOOST_CONCEPT_USAGE(DistanceMeasure) { typedef typename Measure::distance_type Distance; typedef typename Measure::result_type Result; Result r = m(Distance(), g); ignore_unused_variable_warning(r); } private: Measure m; Graph g; }; } /* namespace concepts */ using boost::concepts::MultiPassInputIteratorConcept; // Graph concepts using boost::concepts::GraphConcept; using boost::concepts::IncidenceGraphConcept; using boost::concepts::BidirectionalGraphConcept; using boost::concepts::AdjacencyGraphConcept; using boost::concepts::VertexListGraphConcept; using boost::concepts::EdgeListGraphConcept; using boost::concepts::VertexAndEdgeListGraphConcept; using boost::concepts::EdgeMutableGraphConcept; using boost::concepts::VertexMutableGraphConcept; using boost::concepts::MutableGraphConcept; using boost::concepts::MutableIncidenceGraphConcept; using boost::concepts::MutableBidirectionalGraphConcept; using boost::concepts::MutableEdgeListGraphConcept; using boost::concepts::VertexMutablePropertyGraphConcept; using boost::concepts::EdgeMutablePropertyGraphConcept; using boost::concepts::AdjacencyMatrixConcept; using boost::concepts::ReadablePropertyGraphConcept; using boost::concepts::PropertyGraphConcept; using boost::concepts::LvaluePropertyGraphConcept; using boost::concepts::VertexIndexGraphConcept; using boost::concepts::EdgeIndexGraphConcept; // Utility concepts using boost::concepts::ColorValueConcept; using boost::concepts::BasicMatrixConcept; using boost::concepts::NumericValueConcept; using boost::concepts::DistanceMeasureConcept; using boost::concepts::DegreeMeasureConcept; } /* namespace boost */ #include #endif /* BOOST_GRAPH_CONCEPTS_H */ graph_mutability_traits.hpp000444000765000024 1230112161110612 25037 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// Copyright (C) 2009 Andrew Sutton // // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GRAPH_MUTABILITY_TRAITS_HPP #define BOOST_GRAPH_MUTABILITY_TRAITS_HPP #include #include #include #include #include namespace boost { // The mutabiltiy categories classify graphs by their mutating operations // on the edge and vertex sets. This is a substantially more refined // categorization than the MutableGraph and MutablePropertyGraph denote. // Currently, this framework is only used in the graph tests to help // dispatch test to the correct places. However, there are probably some // constructive or destructive algorithms (i.e., graph generators) that // may use these to describe requirements on graph inputs. struct add_vertex_tag { }; struct add_vertex_property_tag : virtual add_vertex_tag { }; struct add_edge_tag { }; struct add_edge_property_tag : virtual add_edge_tag { }; struct remove_vertex_tag { }; struct remove_edge_tag { }; struct mutable_vertex_graph_tag : virtual add_vertex_tag, virtual remove_vertex_tag { }; struct mutable_vertex_property_graph_tag : virtual add_vertex_property_tag, virtual remove_vertex_tag { }; struct mutable_edge_graph_tag : virtual add_edge_tag, virtual remove_edge_tag { }; struct mutable_edge_property_graph_tag : virtual add_edge_property_tag, virtual remove_edge_tag { }; struct mutable_graph_tag : virtual mutable_vertex_graph_tag , virtual mutable_edge_graph_tag { }; struct mutable_property_graph_tag : virtual mutable_vertex_property_graph_tag , virtual mutable_edge_property_graph_tag { }; // Some graphs just don't like to be torn down. Note this only restricts // teardown to the set of vertices, not the vertex set. // TODO: Find a better name for this tag. struct add_only_property_graph_tag : virtual add_vertex_property_tag , virtual mutable_edge_property_graph_tag { }; /** * The graph_mutability_traits provide methods for determining the * interfaces supported by graph classes for adding and removing vertices * and edges. */ template struct graph_mutability_traits { typedef typename Graph::mutability_category category; }; template struct graph_has_add_vertex : mpl::bool_< is_convertible< typename graph_mutability_traits::category, add_vertex_tag >::value > { }; template struct graph_has_add_vertex_with_property : mpl::bool_< is_convertible< typename graph_mutability_traits::category, add_vertex_property_tag >::value > { }; template struct graph_has_remove_vertex : mpl::bool_< is_convertible< typename graph_mutability_traits::category, remove_vertex_tag >::value > { }; template struct graph_has_add_edge : mpl::bool_< is_convertible< typename graph_mutability_traits::category, add_edge_tag >::value > { }; template struct graph_has_add_edge_with_property : mpl::bool_< is_convertible< typename graph_mutability_traits::category, add_edge_property_tag >::value > { }; template struct graph_has_remove_edge : mpl::bool_< is_convertible< typename graph_mutability_traits::category, remove_edge_tag >::value > { }; template struct is_mutable_vertex_graph : mpl::and_< graph_has_add_vertex, graph_has_remove_vertex > { }; template struct is_mutable_vertex_property_graph : mpl::and_< graph_has_add_vertex_with_property, graph_has_remove_vertex > { }; template struct is_mutable_edge_graph : mpl::and_< graph_has_add_edge, graph_has_remove_edge > { }; template struct is_mutable_edge_property_graph : mpl::and_< graph_has_add_edge_with_property, graph_has_remove_edge > { }; template struct is_mutable_graph : mpl::and_< is_mutable_vertex_graph, is_mutable_edge_graph > { }; template struct is_mutable_property_graph : mpl::and_< is_mutable_vertex_property_graph, is_mutable_edge_property_graph > { }; template struct is_add_only_property_graph : mpl::bool_< is_convertible< typename graph_mutability_traits::category, add_only_property_graph_tag >::value > { }; /** @name Mutability Traits Specializations */ //@{ //@} } // namespace boost #endif graph_selectors.hpp000444000765000024 235412161110612 23260 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 2002 Indiana University. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_SELECTORS_HPP #define BOOST_GRAPH_SELECTORS_HPP #include namespace boost { //=========================================================================== // Selectors for the Directed template parameter of adjacency_list // and adjacency_matrix. struct directedS { enum { is_directed = true, is_bidir = false }; typedef mpl::true_ is_directed_t; typedef mpl::false_ is_bidir_t; }; struct undirectedS { enum { is_directed = false, is_bidir = false }; typedef mpl::false_ is_directed_t; typedef mpl::false_ is_bidir_t; }; struct bidirectionalS { enum { is_directed = true, is_bidir = true }; typedef mpl::true_ is_directed_t; typedef mpl::true_ is_bidir_t; }; } // namespace boost #endif // BOOST_GRAPH_SELECTORS_HPP graph_traits.hpp000444000765000024 3203712161110612 22604 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_TRAITS_HPP #define BOOST_GRAPH_TRAITS_HPP #include #include #include /* Primarily for std::pair */ #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace detail { #define BOOST_GRAPH_MEMBER_OR_VOID(name) \ BOOST_MPL_HAS_XXX_TRAIT_DEF(name) \ template struct BOOST_JOIN(get_member_, name) {typedef typename T::name type;}; \ template struct BOOST_JOIN(get_opt_member_, name): \ boost::mpl::eval_if_c< \ BOOST_JOIN(has_, name)::value, \ BOOST_JOIN(get_member_, name), \ boost::mpl::identity > \ {}; BOOST_GRAPH_MEMBER_OR_VOID(adjacency_iterator) BOOST_GRAPH_MEMBER_OR_VOID(out_edge_iterator) BOOST_GRAPH_MEMBER_OR_VOID(in_edge_iterator) BOOST_GRAPH_MEMBER_OR_VOID(vertex_iterator) BOOST_GRAPH_MEMBER_OR_VOID(edge_iterator) BOOST_GRAPH_MEMBER_OR_VOID(vertices_size_type) BOOST_GRAPH_MEMBER_OR_VOID(edges_size_type) BOOST_GRAPH_MEMBER_OR_VOID(degree_size_type) } template struct graph_traits { #define BOOST_GRAPH_PULL_OPT_MEMBER(name) \ typedef typename detail::BOOST_JOIN(get_opt_member_, name)::type name; typedef typename G::vertex_descriptor vertex_descriptor; typedef typename G::edge_descriptor edge_descriptor; BOOST_GRAPH_PULL_OPT_MEMBER(adjacency_iterator) BOOST_GRAPH_PULL_OPT_MEMBER(out_edge_iterator) BOOST_GRAPH_PULL_OPT_MEMBER(in_edge_iterator) BOOST_GRAPH_PULL_OPT_MEMBER(vertex_iterator) BOOST_GRAPH_PULL_OPT_MEMBER(edge_iterator) typedef typename G::directed_category directed_category; typedef typename G::edge_parallel_category edge_parallel_category; typedef typename G::traversal_category traversal_category; BOOST_GRAPH_PULL_OPT_MEMBER(vertices_size_type) BOOST_GRAPH_PULL_OPT_MEMBER(edges_size_type) BOOST_GRAPH_PULL_OPT_MEMBER(degree_size_type) #undef BOOST_GRAPH_PULL_OPT_MEMBER static inline vertex_descriptor null_vertex(); }; template inline typename graph_traits::vertex_descriptor graph_traits::null_vertex() { return G::null_vertex(); } // directed_category tags struct directed_tag { }; struct undirected_tag { }; struct bidirectional_tag : public directed_tag { }; namespace detail { inline bool is_directed(directed_tag) { return true; } inline bool is_directed(undirected_tag) { return false; } } /** Return true if the given graph is directed. */ template bool is_directed(const Graph&) { typedef typename graph_traits::directed_category Cat; return detail::is_directed(Cat()); } /** Return true if the given graph is undirected. */ template bool is_undirected(const Graph& g) { return !is_directed(g); } /** @name Directed/Undirected Graph Traits */ //@{ namespace graph_detail { template struct is_directed_tag : mpl::bool_::value> { }; } // namespace graph_detail template struct is_directed_graph : graph_detail::is_directed_tag< typename graph_traits::directed_category > { }; template struct is_undirected_graph : mpl::not_< is_directed_graph > { }; //@} // edge_parallel_category tags struct allow_parallel_edge_tag { }; struct disallow_parallel_edge_tag { }; namespace detail { inline bool allows_parallel(allow_parallel_edge_tag) { return true; } inline bool allows_parallel(disallow_parallel_edge_tag) { return false; } } template bool allows_parallel_edges(const Graph&) { typedef typename graph_traits::edge_parallel_category Cat; return detail::allows_parallel(Cat()); } /** @name Parallel Edges Traits */ //@{ /** * The is_multigraph metafunction returns true if the graph allows * parallel edges. Technically, a multigraph is a simple graph that * allows parallel edges, but since there are no traits for the allowance * or disallowance of loops, this is a moot point. */ template struct is_multigraph : mpl::bool_< is_same< typename graph_traits::edge_parallel_category, allow_parallel_edge_tag >::value > { }; //@} // traversal_category tags struct incidence_graph_tag { }; struct adjacency_graph_tag { }; struct bidirectional_graph_tag : virtual incidence_graph_tag { }; struct vertex_list_graph_tag { }; struct edge_list_graph_tag { }; struct adjacency_matrix_tag { }; /** @name Taversal Category Traits * These traits classify graph types by their supported methods of * vertex and edge traversal. */ //@{ template struct is_incidence_graph : mpl::bool_< is_convertible< typename graph_traits::traversal_category, incidence_graph_tag >::value > { }; template struct is_bidirectional_graph : mpl::bool_< is_convertible< typename graph_traits::traversal_category, bidirectional_graph_tag >::value > { }; template struct is_vertex_list_graph : mpl::bool_< is_convertible< typename graph_traits::traversal_category, vertex_list_graph_tag >::value > { }; template struct is_edge_list_graph : mpl::bool_< is_convertible< typename graph_traits::traversal_category, edge_list_graph_tag >::value > { }; template struct is_adjacency_matrix : mpl::bool_< is_convertible< typename graph_traits::traversal_category, adjacency_matrix_tag >::value > { }; //@} /** @name Directed Graph Traits * These metafunctions are used to fully classify directed vs. undirected * graphs. Recall that an undirected graph is also bidirectional, but it * cannot be both undirected and directed at the same time. */ //@{ template struct is_directed_unidirectional_graph : mpl::and_< is_directed_graph, mpl::not_< is_bidirectional_graph > > { }; template struct is_directed_bidirectional_graph : mpl::and_< is_directed_graph, is_bidirectional_graph > { }; //@} //?? not the right place ?? Lee typedef boost::forward_traversal_tag multi_pass_input_iterator_tag; namespace detail { BOOST_MPL_HAS_XXX_TRAIT_DEF(graph_property_type) BOOST_MPL_HAS_XXX_TRAIT_DEF(edge_property_type) BOOST_MPL_HAS_XXX_TRAIT_DEF(vertex_property_type) template struct get_graph_property_type {typedef typename G::graph_property_type type;}; template struct get_edge_property_type {typedef typename G::edge_property_type type;}; template struct get_vertex_property_type {typedef typename G::vertex_property_type type;}; } template struct graph_property_type : boost::mpl::eval_if, detail::get_graph_property_type, no_property> {}; template struct edge_property_type : boost::mpl::eval_if, detail::get_edge_property_type, no_property> {}; template struct vertex_property_type : boost::mpl::eval_if, detail::get_vertex_property_type, no_property> {}; template struct graph_bundle_type { typedef typename G::graph_bundled type; }; template struct vertex_bundle_type { typedef typename G::vertex_bundled type; }; template struct edge_bundle_type { typedef typename G::edge_bundled type; }; namespace graph { namespace detail { template class bundled_result { typedef typename graph_traits::vertex_descriptor Vertex; typedef typename mpl::if_c<(is_same::value), vertex_bundle_type, edge_bundle_type >::type bundler; public: typedef typename bundler::type type; }; template class bundled_result { typedef typename graph_traits::vertex_descriptor Vertex; typedef graph_bundle_type bundler; public: typedef typename bundler::type type; }; } } // namespace graph::detail namespace graph_detail { // A helper metafunction for determining whether or not a type is // bundled. template struct is_no_bundle : mpl::bool_::value> { }; } // namespace graph_detail /** @name Graph Property Traits * These metafunctions (along with those above), can be used to access the * vertex and edge properties (bundled or otherwise) of vertices and * edges. */ //@{ template struct has_graph_property : mpl::not_< typename detail::is_no_property< typename graph_property_type::type >::type >::type { }; template struct has_bundled_graph_property : mpl::not_< graph_detail::is_no_bundle::type> > { }; template struct has_vertex_property : mpl::not_< typename detail::is_no_property::type> >::type { }; template struct has_bundled_vertex_property : mpl::not_< graph_detail::is_no_bundle::type> > { }; template struct has_edge_property : mpl::not_< typename detail::is_no_property::type> >::type { }; template struct has_bundled_edge_property : mpl::not_< graph_detail::is_no_bundle::type> > { }; //@} } // namespace boost // Since pair is in namespace std, Koenig lookup will find source and // target if they are also defined in namespace std. This is illegal, // but the alternative is to put source and target in the global // namespace which causes name conflicts with other libraries (like // SUIF). namespace std { /* Some helper functions for dealing with pairs as edges */ template T source(pair p, const G&) { return p.first; } template T target(pair p, const G&) { return p.second; } } #if defined(__GNUC__) && defined(__SGI_STL_PORT) // For some reason g++ with STLport does not see the above definition // of source() and target() unless we bring them into the boost // namespace. namespace boost { using std::source; using std::target; } #endif #endif // BOOST_GRAPH_TRAITS_HPP iteration_macros.hpp000444000765000024 1711512161110616 23463 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 2001 Indiana University // Author: Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_ITERATION_MACROS_HPP #define BOOST_GRAPH_ITERATION_MACROS_HPP #include #define BGL_CAT(x,y) x ## y #define BGL_RANGE(linenum) BGL_CAT(bgl_range_,linenum) #define BGL_FIRST(linenum) (BGL_RANGE(linenum).first) #define BGL_LAST(linenum) (BGL_RANGE(linenum).second) /* BGL_FORALL_VERTICES_T(v, g, graph_t) // This is on line 9 expands to the following, but all on the same line for (typename boost::graph_traits::vertex_iterator bgl_first_9 = vertices(g).first, bgl_last_9 = vertices(g).second; bgl_first_9 != bgl_last_9; bgl_first_9 = bgl_last_9) for (typename boost::graph_traits::vertex_descriptor v; bgl_first_9 != bgl_last_9 ? (v = *bgl_first_9, true) : false; ++bgl_first_9) The purpose of having two for-loops is just to provide a place to declare both the iterator and value variables. There is really only one loop. The stopping condition gets executed two more times than it usually would be, oh well. The reason for the bgl_first_9 = bgl_last_9 in the outer for-loop is in case the user puts a break statement in the inner for-loop. The other macros work in a similar fashion. Use the _T versions when the graph type is a template parameter or dependent on a template parameter. Otherwise use the non _T versions. ----------------------- 6/9/09 THK The above contains two calls to the vertices function. I modified these macros to expand to for (std::pair::vertex_iterator, typename boost::graph_traits::vertex_iterator> bgl_range_9 = vertices(g); bgl_range_9.first != bgl_range_9.second; bgl_range_9.first = bgl_range_9.second) for (typename boost::graph_traits::vertex_descriptor v; bgl_range_9.first != bgl_range_9.second ? (v = *bgl_range_9.first, true) : false; ++bgl_range_9.first) */ #define BGL_FORALL_VERTICES_T(VNAME, GNAME, GraphType) \ for (std::pair::vertex_iterator, \ typename boost::graph_traits::vertex_iterator> BGL_RANGE(__LINE__) = vertices(GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (typename boost::graph_traits::vertex_descriptor VNAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true):false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_VERTICES(VNAME, GNAME, GraphType) \ for (std::pair::vertex_iterator, \ boost::graph_traits::vertex_iterator> BGL_RANGE(__LINE__) = vertices(GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (boost::graph_traits::vertex_descriptor VNAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true):false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_EDGES_T(ENAME, GNAME, GraphType) \ for (std::pair::edge_iterator, \ typename boost::graph_traits::edge_iterator> BGL_RANGE(__LINE__) = edges(GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (typename boost::graph_traits::edge_descriptor ENAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true):false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_EDGES(ENAME, GNAME, GraphType) \ for (std::pair::edge_iterator, \ boost::graph_traits::edge_iterator> BGL_RANGE(__LINE__) = edges(GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (boost::graph_traits::edge_descriptor ENAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true):false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_ADJ_T(UNAME, VNAME, GNAME, GraphType) \ for (std::pair::adjacency_iterator, \ typename boost::graph_traits::adjacency_iterator> BGL_RANGE(__LINE__) = adjacent_vertices(UNAME, GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (typename boost::graph_traits::vertex_descriptor VNAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true) : false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_ADJ(UNAME, VNAME, GNAME, GraphType) \ for (std::pair::adjacency_iterator, \ boost::graph_traits::adjacency_iterator> BGL_RANGE(__LINE__) = adjacent_vertices(UNAME, GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (boost::graph_traits::vertex_descriptor VNAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true) : false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_OUTEDGES_T(UNAME, ENAME, GNAME, GraphType) \ for (std::pair::out_edge_iterator, \ typename boost::graph_traits::out_edge_iterator> BGL_RANGE(__LINE__) = out_edges(UNAME, GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (typename boost::graph_traits::edge_descriptor ENAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true) : false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_OUTEDGES(UNAME, ENAME, GNAME, GraphType) \ for (std::pair::out_edge_iterator, \ boost::graph_traits::out_edge_iterator> BGL_RANGE(__LINE__) = out_edges(UNAME, GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (boost::graph_traits::edge_descriptor ENAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true) : false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_INEDGES_T(UNAME, ENAME, GNAME, GraphType) \ for (std::pair::in_edge_iterator, \ typename boost::graph_traits::in_edge_iterator> BGL_RANGE(__LINE__) = in_edges(UNAME, GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (typename boost::graph_traits::edge_descriptor ENAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true) : false; \ ++BGL_FIRST(__LINE__)) #define BGL_FORALL_INEDGES(UNAME, ENAME, GNAME, GraphType) \ for (std::pair::in_edge_iterator, \ boost::graph_traits::in_edge_iterator> BGL_RANGE(__LINE__) = in_edges(UNAME, GNAME); \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ for (boost::graph_traits::edge_descriptor ENAME; \ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true) : false; \ ++BGL_FIRST(__LINE__)) #endif // BOOST_GRAPH_ITERATION_MACROS_HPP named_function_params.hpp000444000765000024 10046612161110700 24471 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP #define BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { struct parity_map_t { }; struct vertex_assignment_map_t { }; struct distance_compare_t { }; struct distance_combine_t { }; struct distance_inf_t { }; struct distance_zero_t { }; struct buffer_param_t { }; struct edge_copy_t { }; struct vertex_copy_t { }; struct vertex_isomorphism_t { }; struct vertex_invariant_t { }; struct vertex_invariant1_t { }; struct vertex_invariant2_t { }; struct edge_compare_t { }; struct vertex_max_invariant_t { }; struct orig_to_copy_t { }; struct root_vertex_t { }; struct polling_t { }; struct lookahead_t { }; struct in_parallel_t { }; struct attractive_force_t { }; struct repulsive_force_t { }; struct force_pairs_t { }; struct cooling_t { }; struct vertex_displacement_t { }; struct iterations_t { }; struct diameter_range_t { }; struct learning_constant_range_t { }; struct vertices_equivalent_t { }; struct edges_equivalent_t { }; struct index_in_heap_map_t { }; struct max_priority_queue_t { }; #define BOOST_BGL_DECLARE_NAMED_PARAMS \ BOOST_BGL_ONE_PARAM_CREF(weight_map, edge_weight) \ BOOST_BGL_ONE_PARAM_CREF(weight_map2, edge_weight2) \ BOOST_BGL_ONE_PARAM_CREF(distance_map, vertex_distance) \ BOOST_BGL_ONE_PARAM_CREF(predecessor_map, vertex_predecessor) \ BOOST_BGL_ONE_PARAM_CREF(rank_map, vertex_rank) \ BOOST_BGL_ONE_PARAM_CREF(root_map, vertex_root) \ BOOST_BGL_ONE_PARAM_CREF(root_vertex, root_vertex) \ BOOST_BGL_ONE_PARAM_CREF(edge_centrality_map, edge_centrality) \ BOOST_BGL_ONE_PARAM_CREF(centrality_map, vertex_centrality) \ BOOST_BGL_ONE_PARAM_CREF(parity_map, parity_map) \ BOOST_BGL_ONE_PARAM_CREF(color_map, vertex_color) \ BOOST_BGL_ONE_PARAM_CREF(edge_color_map, edge_color) \ BOOST_BGL_ONE_PARAM_CREF(capacity_map, edge_capacity) \ BOOST_BGL_ONE_PARAM_CREF(residual_capacity_map, edge_residual_capacity) \ BOOST_BGL_ONE_PARAM_CREF(reverse_edge_map, edge_reverse) \ BOOST_BGL_ONE_PARAM_CREF(discover_time_map, vertex_discover_time) \ BOOST_BGL_ONE_PARAM_CREF(lowpoint_map, vertex_lowpoint) \ BOOST_BGL_ONE_PARAM_CREF(vertex_index_map, vertex_index) \ BOOST_BGL_ONE_PARAM_CREF(vertex_index1_map, vertex_index1) \ BOOST_BGL_ONE_PARAM_CREF(vertex_index2_map, vertex_index2) \ BOOST_BGL_ONE_PARAM_CREF(vertex_assignment_map, vertex_assignment_map) \ BOOST_BGL_ONE_PARAM_CREF(visitor, graph_visitor) \ BOOST_BGL_ONE_PARAM_CREF(distance_compare, distance_compare) \ BOOST_BGL_ONE_PARAM_CREF(distance_combine, distance_combine) \ BOOST_BGL_ONE_PARAM_CREF(distance_inf, distance_inf) \ BOOST_BGL_ONE_PARAM_CREF(distance_zero, distance_zero) \ BOOST_BGL_ONE_PARAM_CREF(edge_copy, edge_copy) \ BOOST_BGL_ONE_PARAM_CREF(vertex_copy, vertex_copy) \ BOOST_BGL_ONE_PARAM_REF(buffer, buffer_param) \ BOOST_BGL_ONE_PARAM_CREF(orig_to_copy, orig_to_copy) \ BOOST_BGL_ONE_PARAM_CREF(isomorphism_map, vertex_isomorphism) \ BOOST_BGL_ONE_PARAM_CREF(vertex_invariant, vertex_invariant) \ BOOST_BGL_ONE_PARAM_CREF(vertex_invariant1, vertex_invariant1) \ BOOST_BGL_ONE_PARAM_CREF(vertex_invariant2, vertex_invariant2) \ BOOST_BGL_ONE_PARAM_CREF(vertex_max_invariant, vertex_max_invariant) \ BOOST_BGL_ONE_PARAM_CREF(polling, polling) \ BOOST_BGL_ONE_PARAM_CREF(lookahead, lookahead) \ BOOST_BGL_ONE_PARAM_CREF(in_parallel, in_parallel) \ BOOST_BGL_ONE_PARAM_CREF(displacement_map, vertex_displacement) \ BOOST_BGL_ONE_PARAM_CREF(attractive_force, attractive_force) \ BOOST_BGL_ONE_PARAM_CREF(repulsive_force, repulsive_force) \ BOOST_BGL_ONE_PARAM_CREF(force_pairs, force_pairs) \ BOOST_BGL_ONE_PARAM_CREF(cooling, cooling) \ BOOST_BGL_ONE_PARAM_CREF(iterations, iterations) \ BOOST_BGL_ONE_PARAM_CREF(diameter_range, diameter_range) \ BOOST_BGL_ONE_PARAM_CREF(learning_constant_range, learning_constant_range) \ BOOST_BGL_ONE_PARAM_CREF(vertices_equivalent, vertices_equivalent) \ BOOST_BGL_ONE_PARAM_CREF(edges_equivalent, edges_equivalent) \ BOOST_BGL_ONE_PARAM_CREF(index_in_heap_map, index_in_heap_map) \ BOOST_BGL_ONE_PARAM_REF(max_priority_queue, max_priority_queue) template struct bgl_named_params { typedef bgl_named_params self; typedef Base next_type; typedef Tag tag_type; typedef T value_type; bgl_named_params(T v = T()) : m_value(v) { } bgl_named_params(T v, const Base& b) : m_value(v), m_base(b) { } T m_value; Base m_base; #define BOOST_BGL_ONE_PARAM_REF(name, key) \ template \ bgl_named_params, BOOST_PP_CAT(key, _t), self> \ name(PType& p) const { \ typedef bgl_named_params, BOOST_PP_CAT(key, _t), self> Params; \ return Params(boost::ref(p), *this); \ } \ #define BOOST_BGL_ONE_PARAM_CREF(name, key) \ template \ bgl_named_params \ name(const PType& p) const { \ typedef bgl_named_params Params; \ return Params(p, *this); \ } \ BOOST_BGL_DECLARE_NAMED_PARAMS #undef BOOST_BGL_ONE_PARAM_REF #undef BOOST_BGL_ONE_PARAM_CREF // Duplicate template bgl_named_params vertex_color_map(const PType& p) const {return this->color_map(p);} }; #define BOOST_BGL_ONE_PARAM_REF(name, key) \ template \ bgl_named_params, BOOST_PP_CAT(key, _t)> \ name(PType& p) { \ typedef bgl_named_params, BOOST_PP_CAT(key, _t)> Params; \ return Params(boost::ref(p)); \ } \ #define BOOST_BGL_ONE_PARAM_CREF(name, key) \ template \ bgl_named_params \ name(const PType& p) { \ typedef bgl_named_params Params; \ return Params(p); \ } \ BOOST_BGL_DECLARE_NAMED_PARAMS #undef BOOST_BGL_ONE_PARAM_REF #undef BOOST_BGL_ONE_PARAM_CREF // Duplicate template bgl_named_params vertex_color_map(const PType& p) {return color_map(p);} namespace detail { struct unused_tag_type {}; } typedef bgl_named_params no_named_parameters; //=========================================================================== // Functions for extracting parameters from bgl_named_params template struct lookup_named_param {}; template struct lookup_named_param > { typedef T type; static const T& get(const bgl_named_params& p) { return p.m_value; } }; template struct lookup_named_param > { typedef typename lookup_named_param::type type; static const type& get(const bgl_named_params& p) { return lookup_named_param::get(p.m_base); } }; template struct lookup_named_param_def { typedef Def type; static const Def& get(const Args&, const Def& def) {return def;} }; template struct lookup_named_param_def, Def> { typedef T type; static const type& get(const bgl_named_params& p, const Def&) { return p.m_value; } }; template struct lookup_named_param_def, Def> { typedef typename lookup_named_param_def::type type; static const type& get(const bgl_named_params& p, const Def& def) { return lookup_named_param_def::get(p.m_base, def); } }; struct param_not_found {}; template struct get_param_type: lookup_named_param_def {}; template inline const typename lookup_named_param_def::type& get_param(const Args& p, Tag) { return lookup_named_param_def::get(p, param_not_found()); } template const P& choose_param(const P& param, const Default&) { return param; } template Default choose_param(const param_not_found&, const Default& d) { return d; } template inline bool is_default_param(const T&) { return false; } inline bool is_default_param(const param_not_found&) { return true; } namespace detail { template struct const_type_as_type {typedef typename T::const_type type;}; } // namespace detail // Use this function instead of choose_param() when you want // to avoid requiring get(tag, g) when it is not used. namespace detail { template struct choose_impl_result: boost::mpl::eval_if< boost::is_same, boost::mpl::eval_if< GraphIsConst, detail::const_type_as_type >, property_map >, boost::mpl::identity > {}; // Parameters of f are (GraphIsConst, Graph, Param, Tag) template struct choose_impl_helper; template <> struct choose_impl_helper { template static typename property_map::type, PropertyTag>::const_type f(boost::mpl::true_, const Graph& g, const Param&, PropertyTag tag) { return get(tag, g); } template static typename property_map::type, PropertyTag>::type f(boost::mpl::false_, Graph& g, const Param&, PropertyTag tag) { return get(tag, g); } }; template <> struct choose_impl_helper { template static Param f(GraphIsConst, const Graph&, const Param& p, PropertyTag) { return p; } }; } template typename detail::choose_impl_result::type choose_const_pmap(const Param& p, const Graph& g, PropertyTag tag) { return detail::choose_impl_helper::value> ::f(boost::mpl::true_(), g, p, tag); } template typename detail::choose_impl_result::type choose_pmap(const Param& p, Graph& g, PropertyTag tag) { return detail::choose_impl_helper::value> ::f(boost::mpl::false_(), g, p, tag); } namespace detail { // used in the max-flow algorithms template struct edge_capacity_value { typedef bgl_named_params Params; typedef typename detail::choose_impl_result::type, edge_capacity_t>::type CapacityEdgeMap; typedef typename property_traits::value_type type; }; } // Declare all new tags namespace graph { namespace keywords { #define BOOST_BGL_ONE_PARAM_REF(name, key) BOOST_PARAMETER_NAME(name) #define BOOST_BGL_ONE_PARAM_CREF(name, key) BOOST_PARAMETER_NAME(name) BOOST_BGL_DECLARE_NAMED_PARAMS #undef BOOST_BGL_ONE_PARAM_REF #undef BOOST_BGL_ONE_PARAM_CREF } } namespace detail { template struct convert_one_keyword {}; #define BOOST_BGL_ONE_PARAM_REF(name, key) \ template <> \ struct convert_one_keyword { \ typedef boost::graph::keywords::tag::name type; \ }; #define BOOST_BGL_ONE_PARAM_CREF(name, key) BOOST_BGL_ONE_PARAM_REF(name, key) BOOST_BGL_DECLARE_NAMED_PARAMS #undef BOOST_BGL_ONE_PARAM_REF #undef BOOST_BGL_ONE_PARAM_CREF template struct convert_bgl_params_to_boost_parameter { typedef typename convert_one_keyword::type new_kw; typedef boost::parameter::aux::tagged_argument tagged_arg_type; typedef convert_bgl_params_to_boost_parameter rest_conv; typedef boost::parameter::aux::arg_list type; static type conv(const T& x) { return type(tagged_arg_type(x.m_value), rest_conv::conv(x.m_base)); } }; template struct convert_bgl_params_to_boost_parameter > { typedef convert_bgl_params_to_boost_parameter rest_conv; typedef typename rest_conv::type type; static type conv(const bgl_named_params& x) { return rest_conv::conv(x.m_base); } }; template <> struct convert_bgl_params_to_boost_parameter { typedef boost::parameter::aux::empty_arg_list type; static type conv(const boost::no_property&) {return type();} }; template <> struct convert_bgl_params_to_boost_parameter { typedef boost::parameter::aux::empty_arg_list type; static type conv(const boost::no_named_parameters&) {return type();} }; struct bgl_parameter_not_found_type {}; template struct parameter_exists : boost::mpl::not_::type, bgl_parameter_not_found_type> > {}; } #define BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(old_type, old_var) \ typedef typename boost::detail::convert_bgl_params_to_boost_parameter::type arg_pack_type; \ arg_pack_type arg_pack = boost::detail::convert_bgl_params_to_boost_parameter::conv(old_var); namespace detail { template struct override_const_property_t { typedef typename boost::remove_const::type result_type; result_type operator()(const Graph&, const ArgType& a) const {return a;} }; template struct override_const_property_t { typedef typename boost::property_map::const_type result_type; result_type operator()(const Graph& g, const ArgType&) const {return get(Prop(), g);} }; template struct override_const_property_result { typedef typename override_const_property_t< typename boost::parameter::value_type::type, Prop, Graph, boost::detail::parameter_exists::value >::result_type type; }; template typename override_const_property_result::type override_const_property(const ArgPack& ap, const boost::parameter::keyword& t, const Graph& g, Prop) { return override_const_property_t< typename boost::parameter::value_type::type, Prop, Graph, boost::detail::parameter_exists::value >()(g, ap[t | 0]); } template struct override_property_t { typedef ArgType result_type; result_type operator()(const Graph&, const typename boost::add_reference::type a) const {return a;} }; template struct override_property_t { typedef typename boost::property_map::type result_type; result_type operator()(const Graph& g, const ArgType&) const {return get(Prop(), g);} }; template struct override_property_result { typedef typename override_property_t< typename boost::parameter::value_type::type, Prop, Graph, boost::detail::parameter_exists::value >::result_type type; }; template typename override_property_result::type override_property(const ArgPack& ap, const boost::parameter::keyword& t, const Graph& g, Prop) { return override_property_t< typename boost::parameter::value_type::type, Prop, Graph, boost::detail::parameter_exists::value >()(g, ap[t | 0]); } template struct make_arg_pack_type; template <> struct make_arg_pack_type {typedef boost::parameter::aux::empty_arg_list type;}; template struct make_arg_pack_type { typedef boost::parameter::aux::tagged_argument type; }; #define BOOST_GRAPH_OPENING_PART_OF_PAIR(z, i, n) boost::parameter::aux::arg_list, #define BOOST_GRAPH_MAKE_PAIR_PARAM(z, i, _) const boost::parameter::aux::tagged_argument& BOOST_PP_CAT(kw, i) #define BOOST_GRAPH_MAKE_AP_TYPE_SPECIALIZATION(z, i, _) \ template \ struct make_arg_pack_type { \ typedef \ BOOST_PP_REPEAT(i, BOOST_GRAPH_OPENING_PART_OF_PAIR, BOOST_PP_DEC(i)) boost::parameter::aux::empty_arg_list BOOST_PP_REPEAT(i, > BOOST_PP_TUPLE_EAT(3), ~) \ type; \ }; BOOST_PP_REPEAT_FROM_TO(2, 11, BOOST_GRAPH_MAKE_AP_TYPE_SPECIALIZATION, ~) #undef BOOST_GRAPH_MAKE_AP_TYPE_SPECIALIZATION #define BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(name, nfixed, nnamed_max) \ /* Entry point for conversion from BGL-style named parameters */ \ template \ typename boost::result_of< \ detail::BOOST_PP_CAT(name, _impl)(BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_COMMA_IF(nfixed) const ArgPack&) \ >::type \ BOOST_PP_CAT(name, _with_named_params)(BOOST_PP_ENUM_BINARY_PARAMS(nfixed, const Param, & param) BOOST_PP_COMMA_IF(nfixed) const ArgPack& arg_pack) { \ return detail::BOOST_PP_CAT(name, _impl)()(BOOST_PP_ENUM_PARAMS(nfixed, param) BOOST_PP_COMMA_IF(nfixed) arg_pack); \ } \ /* Individual functions taking Boost.Parameter-style keyword arguments */ \ BOOST_PP_REPEAT(BOOST_PP_INC(nnamed_max), BOOST_GRAPH_MAKE_FORWARDING_FUNCTION_ONE, (name)(nfixed)) #define BOOST_GRAPH_MAKE_FORWARDING_FUNCTION_ONE(z, nnamed, seq) \ BOOST_GRAPH_MAKE_FORWARDING_FUNCTION_ONEX(z, nnamed, BOOST_PP_SEQ_ELEM(0, seq), BOOST_PP_SEQ_ELEM(1, seq)) #define BOOST_GRAPH_MAKE_FORWARDING_FUNCTION_ONEX(z, nnamed, name, nfixed) \ template \ typename boost::result_of< \ detail::BOOST_PP_CAT(name, _impl) \ (BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_COMMA_IF(nfixed) \ const typename boost::detail::make_arg_pack_type::type&) \ >::type \ name(BOOST_PP_ENUM_BINARY_PARAMS(nfixed, const Param, & param) \ BOOST_PP_ENUM_TRAILING(nnamed, BOOST_GRAPH_MAKE_PAIR_PARAM, ~)) { \ return detail::BOOST_PP_CAT(name, _impl)() \ (BOOST_PP_ENUM_PARAMS(nfixed, param), \ (boost::parameter::aux::empty_arg_list() BOOST_PP_ENUM_TRAILING_PARAMS(nnamed, kw))); \ } #define BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(name, nfixed) \ template \ typename boost::result_of< \ ::boost::graph::detail::BOOST_PP_CAT(name, _impl) BOOST_PP_EXPR_IF(nfixed, <) BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_EXPR_IF(nfixed, >) \ (BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_COMMA_IF(nfixed) \ const typename boost::detail::convert_bgl_params_to_boost_parameter >::type &) \ >::type \ name(BOOST_PP_ENUM_BINARY_PARAMS(nfixed, const Param, & param) BOOST_PP_COMMA_IF(nfixed) const boost::bgl_named_params& old_style_params) { \ typedef boost::bgl_named_params old_style_params_type; \ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(old_style_params_type, old_style_params) \ return ::boost::graph::BOOST_PP_CAT(name, _with_named_params)(BOOST_PP_ENUM_PARAMS(nfixed, param) BOOST_PP_COMMA_IF(nfixed) arg_pack); \ } \ \ BOOST_PP_EXPR_IF(nfixed, template <) BOOST_PP_ENUM_PARAMS(nfixed, typename Param) BOOST_PP_EXPR_IF(nfixed, >) \ BOOST_PP_EXPR_IF(nfixed, typename) boost::result_of< \ ::boost::graph::detail::BOOST_PP_CAT(name, _impl) BOOST_PP_EXPR_IF(nfixed, <) BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_EXPR_IF(nfixed, >) \ (BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_COMMA_IF(nfixed) const boost::parameter::aux::empty_arg_list &) \ >::type \ name(BOOST_PP_ENUM_BINARY_PARAMS(nfixed, const Param, & param)) { \ BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(boost::no_named_parameters, boost::no_named_parameters()) \ return ::boost::graph::BOOST_PP_CAT(name, _with_named_params)(BOOST_PP_ENUM_PARAMS(nfixed, param) BOOST_PP_COMMA_IF(nfixed) arg_pack); \ } } namespace detail { template struct map_maker_helper { typedef PM map_type; static PM make_map(const Graph&, Value, const PM& pm, const ArgPack&) { return pm; } }; template struct map_maker_helper { typedef typename boost::remove_const< typename override_const_property_t< typename boost::parameter::value_type< ArgPack, boost::graph::keywords::tag::vertex_index_map, int>::type, boost::vertex_index_t, Graph, boost::detail::parameter_exists< ArgPack, boost::graph::keywords::tag::vertex_index_map>::value >::result_type>::type vi_map_type; typedef boost::shared_array_property_map map_type; static map_type make_map(const Graph& g, Value v, const PM&, const ArgPack& ap) { return make_shared_array_property_map( num_vertices(g), v, override_const_property( ap, boost::graph::keywords::_vertex_index_map, g, vertex_index)); } }; template struct map_maker { BOOST_STATIC_CONSTANT( bool, has_map = (parameter_exists ::value)); typedef map_maker_helper::type >::type> helper; typedef typename helper::map_type map_type; static map_type make_map(const Graph& g, const ArgPack& ap, ValueType default_value) { return helper::make_map(g, default_value, ap[::boost::parameter::keyword::instance | 0], ap); } }; template class make_property_map_from_arg_pack_gen { ValueType default_value; public: make_property_map_from_arg_pack_gen(ValueType default_value) : default_value(default_value) {} template typename map_maker::map_type operator()(const Graph& g, const ArgPack& ap) const { return map_maker::make_map(g, ap, default_value); } }; template class make_property_map_from_arg_pack_gen { public: template typename map_maker::map_type operator()(const Graph& g, const ArgPack& ap, ValueType default_value) const { return map_maker::make_map(g, ap, default_value); } }; static const make_property_map_from_arg_pack_gen< boost::graph::keywords::tag::color_map, default_color_type> make_color_map_from_arg_pack(white_color); template struct priority_queue_maker_helper { typedef Q priority_queue_type; static priority_queue_type make_queue(const Graph&, const ArgPack&, KeyT, const Q& q) { return q; } }; template struct priority_queue_maker_helper { typedef typename std::vector::size_type default_index_in_heap_type; typedef typename map_maker::helper::map_type index_in_heap_map; typedef boost::d_ary_heap_indirect::helper::map_type, Compare> priority_queue_type; static priority_queue_type make_queue(const Graph& g, const ArgPack& ap, KeyT defaultKey, const Q&) { return priority_queue_type( map_maker::make_map(g, ap, defaultKey), map_maker::make_map(g, ap, typename boost::property_traits::value_type(-1)) ); } }; template struct priority_queue_maker { BOOST_STATIC_CONSTANT( bool, g_hasQ = (parameter_exists ::value)); typedef boost::reference_wrapper int_refw; typedef typename boost::parameter::value_type< ArgPack, PriorityQueueTag, int_refw >::type param_value_type_wrapper; typedef typename param_value_type_wrapper::type param_value_type; typedef typename boost::remove_const::type param_value_type_no_const; typedef priority_queue_maker_helper helper; typedef typename helper::priority_queue_type priority_queue_type; static priority_queue_type make_queue(const Graph& g, const ArgPack& ap, KeyT defaultKey) { return helper::make_queue(g, ap, defaultKey, ap[::boost::parameter::keyword::instance | 0]); } }; template , class KeyMapTag = boost::graph::keywords::tag::distance_map, class IndexInHeapMapTag = boost::graph::keywords::tag::index_in_heap_map> struct make_priority_queue_from_arg_pack_gen { KeyT defaultKey; make_priority_queue_from_arg_pack_gen(KeyT defaultKey_) : defaultKey(defaultKey_) { } template struct result { typedef typename remove_const::arg1_type>::type>::type graph_type; typedef typename remove_const::arg2_type>::type>::type arg_pack_type; typedef typename priority_queue_maker::priority_queue_type type; }; template typename priority_queue_maker::priority_queue_type operator()(const Graph& g, const ArgPack& ap) const { return priority_queue_maker::make_queue(g, ap, defaultKey); } }; template typename boost::graph_traits::vertex_descriptor get_null_vertex(const G&) {return boost::graph_traits::null_vertex();} template typename boost::graph_traits::vertex_descriptor get_default_starting_vertex(const G& g) { std::pair::vertex_iterator, typename boost::graph_traits::vertex_iterator> iters = vertices(g); return (iters.first == iters.second) ? boost::graph_traits::null_vertex() : *iters.first; } template struct get_default_starting_vertex_t { typedef typename boost::graph_traits::vertex_descriptor result_type; const G& g; get_default_starting_vertex_t(const G& g): g(g) {} result_type operator()() const {return get_default_starting_vertex(g);} }; } // namespace detail } // namespace boost #undef BOOST_BGL_DECLARE_NAMED_PARAMS #endif // BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP named_graph.hpp000444000765000024 4632112161110604 22364 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// Copyright (C) 2007 Douglas Gregor // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Provides support for named vertices in graphs, allowing one to more // easily associate unique external names (URLs, city names, employee // ID numbers, etc.) with the vertices of a graph. #ifndef BOOST_GRAPH_NAMED_GRAPH_HPP #define BOOST_GRAPH_NAMED_GRAPH_HPP #include #include #include #include #include #include #include #include #include // for boost::lookup_one_property #include #include // for boost::make_tuple #include #include #include #include #include // for std::equal_to #include // for std::runtime_error #include // for std::pair namespace boost { namespace graph { /******************************************************************* * User-customized traits * *******************************************************************/ /** * @brief Trait used to extract the internal vertex name from a vertex * property. * * To enable the use of internal vertex names in a graph type, * specialize the @c internal_vertex_name trait for your graph * property (e.g., @c a City class, which stores information about the * vertices in a road map). */ template struct internal_vertex_name { /** * The @c type field provides a function object that extracts a key * from the @c VertexProperty. The function object type must have a * nested @c result_type that provides the type of the key. For * more information, see the @c KeyExtractor concept in the * Boost.MultiIndex documentation: @c type must either be @c void * (if @c VertexProperty does not have an internal vertex name) or * a model of @c KeyExtractor. */ typedef void type; }; #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION /** * Extract the internal vertex name from a @c property structure by * looking at its base. */ template struct internal_vertex_name > : internal_vertex_name { }; #endif /** * Construct an instance of @c VertexProperty directly from its * name. This function object should be used within the @c * internal_vertex_constructor trait. */ template struct vertex_from_name { private: typedef typename internal_vertex_name::type extract_name_type; typedef typename remove_cv< typename remove_reference< typename extract_name_type::result_type>::type>::type vertex_name_type; public: typedef vertex_name_type argument_type; typedef VertexProperty result_type; VertexProperty operator()(const vertex_name_type& name) { return VertexProperty(name); } }; /** * Throw an exception whenever one tries to construct a @c * VertexProperty instance from its name. */ template struct cannot_add_vertex { private: typedef typename internal_vertex_name::type extract_name_type; typedef typename remove_cv< typename remove_reference< typename extract_name_type::result_type>::type>::type vertex_name_type; public: typedef vertex_name_type argument_type; typedef VertexProperty result_type; VertexProperty operator()(const vertex_name_type&) { boost::throw_exception(std::runtime_error("add_vertex: " "unable to create a vertex from its name")); } }; /** * @brief Trait used to construct an instance of a @c VertexProperty, * which is a class type that stores the properties associated with a * vertex in a graph, from just the name of that vertex property. This * operation is used when an operation is required to map from a * vertex name to a vertex descriptor (e.g., to add an edge outgoing * from that vertex), but no vertex by the name exists. The function * object provided by this trait will be used to add new vertices * based only on their names. Since this cannot be done for arbitrary * types, the default behavior is to throw an exception when this * routine is called, which requires that all named vertices be added * before adding any edges by name. */ template struct internal_vertex_constructor { /** * The @c type field provides a function object that constructs a * new instance of @c VertexProperty from the name of the vertex (as * determined by @c internal_vertex_name). The function object shall * accept a vertex name and return a @c VertexProperty. Predefined * options include: * * @c vertex_from_name: construct an instance of * @c VertexProperty directly from the name. * * @c cannot_add_vertex: the default value, which * throws an @c std::runtime_error if one attempts to add a vertex * given just the name. */ typedef cannot_add_vertex type; }; #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION /** * Extract the internal vertex constructor from a @c property structure by * looking at its base. */ template struct internal_vertex_constructor > : internal_vertex_constructor { }; #endif /******************************************************************* * Named graph mixin * *******************************************************************/ /** * named_graph is a mixin that provides names for the vertices of a * graph, including a mapping from names to vertices. Graph types that * may or may not be have vertex names (depending on the properties * supplied by the user) should use maybe_named_graph. * * Template parameters: * * Graph: the graph type that derives from named_graph * * Vertex: the type of a vertex descriptor in Graph. Note: we cannot * use graph_traits here, because the Graph is not yet defined. * * VertexProperty: the type stored with each vertex in the Graph. */ template class named_graph { public: /// The type of the function object that extracts names from vertex /// properties. typedef typename internal_vertex_name::type extract_name_type; /// The type of the "bundled" property, from which the name can be /// extracted. typedef typename lookup_one_property::type bundled_vertex_property_type; /// The type of the function object that generates vertex properties /// from names, for the implicit addition of vertices. typedef typename internal_vertex_constructor::type vertex_constructor_type; /// The type used to name vertices in the graph typedef typename remove_cv< typename remove_reference< typename extract_name_type::result_type>::type>::type vertex_name_type; /// The type of vertex descriptors in the graph typedef Vertex vertex_descriptor; private: /// Key extractor for use with the multi_index_container struct extract_name_from_vertex { typedef vertex_name_type result_type; extract_name_from_vertex(Graph& graph, const extract_name_type& extract) : graph(graph), extract(extract) { } const result_type& operator()(Vertex vertex) const { return extract(graph[vertex]); } Graph& graph; extract_name_type extract; }; public: /// The type that maps names to vertices typedef multi_index::multi_index_container< Vertex, multi_index::indexed_by< multi_index::hashed_unique, extract_name_from_vertex> > > named_vertices_type; /// The set of vertices, indexed by name typedef typename named_vertices_type::template index::type vertices_by_name_type; /// Construct an instance of the named graph mixin, using the given /// function object to extract a name from the bundled property /// associated with a vertex. named_graph(const extract_name_type& extract = extract_name_type(), const vertex_constructor_type& vertex_constructor = vertex_constructor_type()); /// Notify the named_graph that we have added the given vertex. The /// name of the vertex will be added to the mapping. void added_vertex(Vertex vertex); /// Notify the named_graph that we are removing the given /// vertex. The name of the vertex will be removed from the mapping. void removing_vertex(Vertex vertex); /// Notify the named_graph that we are clearing the graph. /// This will clear out all of the name->vertex mappings void clearing_graph(); /// Retrieve the derived instance Graph& derived() { return static_cast(*this); } const Graph& derived() const { return static_cast(*this); } /// Extract the name from a vertex property instance typename extract_name_type::result_type extract_name(const bundled_vertex_property_type& property); /// Search for a vertex that has the given property (based on its /// name) optional vertex_by_property(const bundled_vertex_property_type& property); /// Mapping from names to vertices named_vertices_type named_vertices; /// Constructs a vertex from the name of that vertex vertex_constructor_type vertex_constructor; }; /// Helper macro containing the template parameters of named_graph #define BGL_NAMED_GRAPH_PARAMS \ typename Graph, typename Vertex, typename VertexProperty /// Helper macro containing the named_graph<...> instantiation #define BGL_NAMED_GRAPH \ named_graph template BGL_NAMED_GRAPH::named_graph(const extract_name_type& extract, const vertex_constructor_type& vertex_constructor) : named_vertices( typename named_vertices_type::ctor_args_list( boost::make_tuple( boost::make_tuple( 0, // initial number of buckets extract_name_from_vertex(derived(), extract), boost::hash(), std::equal_to())))), vertex_constructor(vertex_constructor) { } template inline void BGL_NAMED_GRAPH::added_vertex(Vertex vertex) { named_vertices.insert(vertex); } template inline void BGL_NAMED_GRAPH::removing_vertex(Vertex vertex) { typedef typename BGL_NAMED_GRAPH::vertex_name_type vertex_name_type; const vertex_name_type& vertex_name = extract_name(derived()[vertex]); named_vertices.erase(vertex_name); } template inline void BGL_NAMED_GRAPH::clearing_graph() { named_vertices.clear(); } template typename BGL_NAMED_GRAPH::extract_name_type::result_type BGL_NAMED_GRAPH::extract_name(const bundled_vertex_property_type& property) { return named_vertices.key_extractor().extract(property); } template optional BGL_NAMED_GRAPH:: vertex_by_property(const bundled_vertex_property_type& property) { return find_vertex(extract_name(property), *this); } /// Retrieve the vertex associated with the given name template optional find_vertex(typename BGL_NAMED_GRAPH::vertex_name_type const& name, const BGL_NAMED_GRAPH& g) { typedef typename BGL_NAMED_GRAPH::vertices_by_name_type vertices_by_name_type; // Retrieve the set of vertices indexed by name vertices_by_name_type const& vertices_by_name = g.named_vertices.template get(); /// Look for a vertex with the given name typename vertices_by_name_type::const_iterator iter = vertices_by_name.find(name); if (iter == vertices_by_name.end()) return optional(); // vertex not found else return *iter; } /// Retrieve the vertex associated with the given name, or add a new /// vertex with that name if no such vertex is available. /// Note: This is enabled only when the vertex property type is different /// from the vertex name to avoid ambiguous overload problems with /// the add_vertex() function that takes a vertex property. template typename disable_if, Vertex>::type add_vertex(typename BGL_NAMED_GRAPH::vertex_name_type const& name, BGL_NAMED_GRAPH& g) { if (optional vertex = find_vertex(name, g)) /// We found the vertex, so return it return *vertex; else /// There is no vertex with the given name, so create one return add_vertex(g.vertex_constructor(name), g.derived()); } /// Add an edge using vertex names to refer to the vertices template std::pair::edge_descriptor, bool> add_edge(typename BGL_NAMED_GRAPH::vertex_name_type const& u_name, typename BGL_NAMED_GRAPH::vertex_name_type const& v_name, BGL_NAMED_GRAPH& g) { return add_edge(add_vertex(u_name, g.derived()), add_vertex(v_name, g.derived()), g.derived()); } /// Add an edge using vertex descriptors or names to refer to the vertices template std::pair::edge_descriptor, bool> add_edge(typename BGL_NAMED_GRAPH::vertex_descriptor const& u, typename BGL_NAMED_GRAPH::vertex_name_type const& v_name, BGL_NAMED_GRAPH& g) { return add_edge(u, add_vertex(v_name, g.derived()), g.derived()); } /// Add an edge using vertex descriptors or names to refer to the vertices template std::pair::edge_descriptor, bool> add_edge(typename BGL_NAMED_GRAPH::vertex_name_type const& u_name, typename BGL_NAMED_GRAPH::vertex_descriptor const& v, BGL_NAMED_GRAPH& g) { return add_edge(add_vertex(u_name, g.derived()), v, g.derived()); } // Overloads to support EdgeMutablePropertyGraph graphs template std::pair::edge_descriptor, bool> add_edge(typename BGL_NAMED_GRAPH::vertex_descriptor const& u, typename BGL_NAMED_GRAPH::vertex_name_type const& v_name, typename edge_property_type::type const& p, BGL_NAMED_GRAPH& g) { return add_edge(u, add_vertex(v_name, g.derived()), p, g.derived()); } template std::pair::edge_descriptor, bool> add_edge(typename BGL_NAMED_GRAPH::vertex_name_type const& u_name, typename BGL_NAMED_GRAPH::vertex_descriptor const& v, typename edge_property_type::type const& p, BGL_NAMED_GRAPH& g) { return add_edge(add_vertex(u_name, g.derived()), v, p, g.derived()); } template std::pair::edge_descriptor, bool> add_edge(typename BGL_NAMED_GRAPH::vertex_name_type const& u_name, typename BGL_NAMED_GRAPH::vertex_name_type const& v_name, typename edge_property_type::type const& p, BGL_NAMED_GRAPH& g) { return add_edge(add_vertex(u_name, g.derived()), add_vertex(v_name, g.derived()), p, g.derived()); } #undef BGL_NAMED_GRAPH #undef BGL_NAMED_GRAPH_PARAMS /******************************************************************* * Maybe named graph mixin * *******************************************************************/ #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION /** * A graph mixin that can provide a mapping from names to vertices, * and use that mapping to simplify creation and manipulation of * graphs. */ template::type> struct maybe_named_graph : public named_graph { }; /** * A graph mixin that can provide a mapping from names to vertices, * and use that mapping to simplify creation and manipulation of * graphs. This partial specialization turns off this functionality * when the @c VertexProperty does not have an internal vertex name. */ template struct maybe_named_graph { /// The type of the "bundled" property, from which the name can be /// extracted. typedef typename lookup_one_property::type bundled_vertex_property_type; /// Notify the named_graph that we have added the given vertex. This /// is a no-op. void added_vertex(Vertex) { } /// Notify the named_graph that we are removing the given /// vertex. This is a no-op. void removing_vertex(Vertex) { } /// Notify the named_graph that we are clearing the graph. This is a /// no-op. void clearing_graph() { } /// Search for a vertex that has the given property (based on its /// name). This always returns an empty optional<> optional vertex_by_property(const bundled_vertex_property_type&) { return optional(); } }; #else template::type> struct maybe_named_graph { /// The type of the "bundled" property, from which the name can be /// extracted. typedef typename detail::extract_bundled_vertex::type bundled_vertex_property_type; /// Notify the named_graph that we have added the given vertex. This /// is a no-op. void added_vertex(Vertex) { } /// Notify the named_graph that we are removing the given /// vertex. This is a no-op. void removing_vertex(Vertex) { } /// Notify the named_graph that we are clearing the graph. This is a /// no-op. void clearing_graph() { } /// Search for a vertex that has the given property (based on its /// name). This always returns an empty optional<> template optional vertex_by_property(const bundled_vertex_property_type&) { return optional(); } }; #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION } } // end namespace boost::graph #endif // BOOST_GRAPH_NAMED_GRAPH_HPP numeric_values.hpp000444000765000024 320412161110606 23113 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// (C) Copyright 2007-2009 Andrew Sutton // // Use, modification and distribution are 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) #ifndef BOOST_GRAPH_NUMERIC_VALUES_HPP #define BOOST_GRAPH_NUMERIC_VALUES_HPP #include namespace boost { #define BOOST_GRAPH_SPECIALIZE_NUMERIC_FLOAT(type) \ template <> struct numeric_values { \ typedef type value_type; \ static type zero() { return 0.0; } \ static type infinity() { return std::numeric_limits::infinity(); } \ }; /** * This generic type reports various numeric values for some type. In the * general case, numeric values simply treat their maximum value as infinity * and the default-constructed value as 0. * * Specializations of this template can redefine the notions of zero and * infinity for various types. For example, the class is specialized for * floating point types to use the built in notion of infinity. */ template struct numeric_values { typedef T value_type; static T zero() { return T(); } static T infinity() { return (std::numeric_limits::max)(); } }; // Specializations for floating point types refer to 0.0 and their infinity // value defined by numeric_limits. BOOST_GRAPH_SPECIALIZE_NUMERIC_FLOAT(float) BOOST_GRAPH_SPECIALIZE_NUMERIC_FLOAT(double) BOOST_GRAPH_SPECIALIZE_NUMERIC_FLOAT(long double) #undef BOOST_GRAPH_SPECIALIZE_NUMERIC_VALUE } #endif overloading.hpp000444000765000024 303612161110660 22406 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// Copyright 2004 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine // // This file contains helps that enable concept-based overloading // within the Boost Graph Library. // #ifndef BOOST_GRAPH_OVERLOADING_HPP #define BOOST_GRAPH_OVERLOADING_HPP #include #include namespace boost { namespace graph { namespace detail { struct no_parameter {}; } } } // end namespace boost::graph::detail #ifndef BOOST_NO_SFINAE #define BOOST_GRAPH_ENABLE_IF_MODELS(Graph, Tag, Type) \ typename enable_if_c<(is_base_and_derived< \ Tag, \ typename graph_traits::traversal_category>::value), \ Type>::type #define BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, Tag) \ , BOOST_GRAPH_ENABLE_IF_MODELS(Graph, Tag, \ ::boost::graph::detail::no_parameter) \ = ::boost::graph::detail::no_parameter() #else #define BOOST_GRAPH_ENABLE_IF_MODELS(Graph, Tag, Type) Type #define BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, Tag) #endif // no SFINAE support #endif // BOOST_GRAPH_OVERLOADING_HPP properties.hpp000444000765000024 3300212161110637 22311 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_PROPERTIES_HPP #define BOOST_GRAPH_PROPERTIES_HPP #include #include #include #include // Include the property map library and extensions in the BGL. #include #include #include #include #include #include #include #include #include #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // Stay out of the way of the concept checking class # define Graph Graph_ # define RandomAccessContainer RandomAccessContainer_ #endif namespace boost { enum default_color_type { white_color, gray_color, green_color, red_color, black_color }; template struct color_traits { static default_color_type white() { return white_color; } static default_color_type gray() { return gray_color; } static default_color_type green() { return green_color; } static default_color_type red() { return red_color; } static default_color_type black() { return black_color; } }; // These functions are now obsolete, replaced by color_traits. inline default_color_type white(default_color_type) { return white_color; } inline default_color_type gray(default_color_type) { return gray_color; } inline default_color_type green(default_color_type) { return green_color; } inline default_color_type red(default_color_type) { return red_color; } inline default_color_type black(default_color_type) { return black_color; } #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION template <> struct property_traits { typedef default_color_type value_type; typedef std::ptrdiff_t key_type; typedef default_color_type& reference; typedef lvalue_property_map_tag category; }; // get/put already defined for T* #endif struct graph_property_tag { }; struct vertex_property_tag { }; struct edge_property_tag { }; // See examples/edge_property.cpp for how to use this. #define BOOST_INSTALL_PROPERTY(KIND, NAME) \ template <> struct property_kind { \ typedef KIND##_property_tag type; \ } #define BOOST_DEF_PROPERTY(KIND, NAME) \ enum KIND##_##NAME##_t { KIND##_##NAME }; \ BOOST_INSTALL_PROPERTY(KIND, NAME) // These three are defined in boost/pending/property.hpp BOOST_INSTALL_PROPERTY(vertex, all); BOOST_INSTALL_PROPERTY(edge, all); BOOST_INSTALL_PROPERTY(graph, all); BOOST_DEF_PROPERTY(vertex, index); BOOST_DEF_PROPERTY(vertex, index1); BOOST_DEF_PROPERTY(vertex, index2); BOOST_DEF_PROPERTY(vertex, root); BOOST_DEF_PROPERTY(edge, index); BOOST_DEF_PROPERTY(edge, name); BOOST_DEF_PROPERTY(edge, weight); BOOST_DEF_PROPERTY(edge, weight2); BOOST_DEF_PROPERTY(edge, color); BOOST_DEF_PROPERTY(vertex, name); BOOST_DEF_PROPERTY(graph, name); BOOST_DEF_PROPERTY(vertex, distance); BOOST_DEF_PROPERTY(vertex, distance2); BOOST_DEF_PROPERTY(vertex, color); BOOST_DEF_PROPERTY(vertex, degree); BOOST_DEF_PROPERTY(vertex, in_degree); BOOST_DEF_PROPERTY(vertex, out_degree); BOOST_DEF_PROPERTY(vertex, current_degree); BOOST_DEF_PROPERTY(vertex, priority); BOOST_DEF_PROPERTY(vertex, discover_time); BOOST_DEF_PROPERTY(vertex, finish_time); BOOST_DEF_PROPERTY(vertex, predecessor); BOOST_DEF_PROPERTY(vertex, rank); BOOST_DEF_PROPERTY(vertex, centrality); BOOST_DEF_PROPERTY(vertex, lowpoint); BOOST_DEF_PROPERTY(vertex, potential); BOOST_DEF_PROPERTY(vertex, update); BOOST_DEF_PROPERTY(vertex, underlying); BOOST_DEF_PROPERTY(edge, reverse); BOOST_DEF_PROPERTY(edge, capacity); BOOST_DEF_PROPERTY(edge, flow); BOOST_DEF_PROPERTY(edge, residual_capacity); BOOST_DEF_PROPERTY(edge, centrality); BOOST_DEF_PROPERTY(edge, discover_time); BOOST_DEF_PROPERTY(edge, update); BOOST_DEF_PROPERTY(edge, finished); BOOST_DEF_PROPERTY(edge, underlying); BOOST_DEF_PROPERTY(graph, visitor); // These tags are used for property bundles // These three are defined in boost/pending/property.hpp BOOST_INSTALL_PROPERTY(graph, bundle); BOOST_INSTALL_PROPERTY(vertex, bundle); BOOST_INSTALL_PROPERTY(edge, bundle); // These tags are used to denote the owners and local descriptors // for the vertices and edges of a distributed graph. BOOST_DEF_PROPERTY(vertex, global); BOOST_DEF_PROPERTY(vertex, owner); BOOST_DEF_PROPERTY(vertex, local); BOOST_DEF_PROPERTY(edge, global); BOOST_DEF_PROPERTY(edge, owner); BOOST_DEF_PROPERTY(edge, local); BOOST_DEF_PROPERTY(vertex, local_index); BOOST_DEF_PROPERTY(edge, local_index); #undef BOOST_DEF_PROPERTY namespace detail { template struct property_kind_from_graph: property_kind {}; #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES template struct property_kind_from_graph { typedef typename boost::mpl::if_< boost::is_base_of::type>, vertex_property_tag, typename boost::mpl::if_< boost::is_base_of::type>, edge_property_tag, typename boost::mpl::if_< boost::is_base_of::type>, graph_property_tag, void>::type>::type>::type type; }; #endif struct dummy_edge_property_selector { template struct bind_ { typedef identity_property_map type; typedef identity_property_map const_type; }; }; struct dummy_vertex_property_selector { template struct bind_ { typedef identity_property_map type; typedef identity_property_map const_type; }; }; } // namespace detail // Graph classes can either partially specialize property_map // or they can specialize these two selector classes. template struct edge_property_selector { typedef detail::dummy_edge_property_selector type; }; template struct vertex_property_selector { typedef detail::dummy_vertex_property_selector type; }; namespace detail { template struct return_void {typedef void type;}; template struct graph_tag_or_void { typedef void type; }; template struct graph_tag_or_void::type> { typedef typename Graph::graph_tag type; }; template struct edge_property_map : edge_property_selector< typename graph_tag_or_void::type >::type::template bind_< Graph, typename edge_property_type::type, PropertyTag> {}; template struct vertex_property_map : vertex_property_selector< typename graph_tag_or_void::type >::type::template bind_< Graph, typename vertex_property_type::type, PropertyTag> {}; } // namespace detail template struct property_map: mpl::if_< is_same::type, edge_property_tag>, detail::edge_property_map, detail::vertex_property_map >::type {}; // shortcut for accessing the value type of the property map template class property_map_value { typedef typename property_map::const_type PMap; public: typedef typename property_traits::value_type type; }; template class graph_property { public: typedef typename property_value< typename boost::graph_property_type::type, Property >::type type; }; template struct vertex_property: vertex_property_type {}; template struct edge_property: edge_property_type {}; template class degree_property_map : public put_get_helper::degree_size_type, degree_property_map > { public: typedef typename graph_traits::vertex_descriptor key_type; typedef typename graph_traits::degree_size_type value_type; typedef value_type reference; typedef readable_property_map_tag category; degree_property_map(const Graph& g) : m_g(g) { } value_type operator[](const key_type& v) const { return degree(v, m_g); } private: const Graph& m_g; }; template inline degree_property_map make_degree_map(const Graph& g) { return degree_property_map(g); } //======================================================================== // Iterator Property Map Generating Functions contributed by // Kevin Vanhorn. (see also the property map generating functions // in boost/property_map/property_map.hpp) #if !defined(BOOST_NO_STD_ITERATOR_TRAITS) // A helper function for creating a vertex property map out of a // random access iterator and the internal vertex index map from a // graph. template inline iterator_property_map< RandomAccessIterator, typename property_map::type, typename std::iterator_traits::value_type, typename std::iterator_traits::reference > make_iterator_vertex_map(RandomAccessIterator iter, const PropertyGraph& g) { return make_iterator_property_map(iter, get(vertex_index, g)); } // Use this next function when vertex_descriptor is known to be an // integer type, with values ranging from 0 to num_vertices(g). // template inline iterator_property_map< RandomAccessIterator, identity_property_map, typename std::iterator_traits::value_type, typename std::iterator_traits::reference > make_iterator_vertex_map(RandomAccessIterator iter) { return make_iterator_property_map(iter, identity_property_map()); } #endif template inline iterator_property_map< typename RandomAccessContainer::iterator, typename property_map::type, typename RandomAccessContainer::value_type, typename RandomAccessContainer::reference > make_container_vertex_map(RandomAccessContainer& c, const PropertyGraph& g) { BOOST_ASSERT(c.size() >= num_vertices(g)); return make_iterator_vertex_map(c.begin(), g); } template inline iterator_property_map< typename RandomAccessContainer::iterator, identity_property_map, typename RandomAccessContainer::value_type, typename RandomAccessContainer::reference > make_container_vertex_map(RandomAccessContainer& c) { return make_iterator_vertex_map(c.begin()); } #if defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) # define BOOST_GRAPH_NO_BUNDLED_PROPERTIES #endif #if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590)) && !defined (BOOST_GRAPH_NO_BUNDLED_PROPERTIES) // This compiler cannot define a partial specialization based on a // pointer-to-member type, as seen in boost/graph/subgraph.hpp line 985 (as of // trunk r53912) # define BOOST_GRAPH_NO_BUNDLED_PROPERTIES #endif // NOTE: These functions are declared, but never defined since they need to // be overloaded by graph implementations. However, we need them to be // declared for the functions below. template typename graph_property::type& get_property(Graph& g, Tag); template typename graph_property::type const& get_property(Graph const& g, Tag); #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES // NOTE: This operation is a simple adaptor over the overloaded get_property // operations. template inline typename graph_property::type& get_property(Graph& g) { return get_property(g, graph_bundle); } template inline typename graph_property::type const& get_property(const Graph& g) { return get_property(g, graph_bundle); } #endif } // namespace boost #endif /* BOOST_GRAPH_PROPERTIES_HPP */ relax.hpp000444000765000024 650212161110623 21210 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_RELAX_HPP #define BOOST_GRAPH_RELAX_HPP #include #include // for numeric limits #include #include namespace boost { // The following version of the plus functor prevents // problems due to overflow at positive infinity. template struct closed_plus { const T inf; closed_plus() : inf((std::numeric_limits::max)()) { } closed_plus(T inf) : inf(inf) { } T operator()(const T& a, const T& b) const { using namespace std; if (a == inf) return inf; if (b == inf) return inf; return a + b; } }; template bool relax(typename graph_traits::edge_descriptor e, const Graph& g, const WeightMap& w, PredecessorMap& p, DistanceMap& d, const BinaryFunction& combine, const BinaryPredicate& compare) { typedef typename graph_traits::directed_category DirCat; bool is_undirected = is_same::value; typedef typename graph_traits::vertex_descriptor Vertex; Vertex u = source(e, g), v = target(e, g); typedef typename property_traits::value_type D; typedef typename property_traits::value_type W; const D d_u = get(d, u); const D d_v = get(d, v); const W& w_e = get(w, e); // The seemingly redundant comparisons after the distance puts are to // ensure that extra floating-point precision in x87 registers does not // lead to relax() returning true when the distance did not actually // change. if ( compare(combine(d_u, w_e), d_v) ) { put(d, v, combine(d_u, w_e)); if (compare(get(d, v), d_v)) { put(p, v, u); return true; } else { return false; } } else if (is_undirected && compare(combine(d_v, w_e), d_u)) { put(d, u, combine(d_v, w_e)); if (compare(get(d, u), d_u)) { put(p, u, v); return true; } else { return false; } } else return false; } template bool relax(typename graph_traits::edge_descriptor e, const Graph& g, WeightMap w, PredecessorMap p, DistanceMap d) { typedef typename property_traits::value_type D; typedef closed_plus Combine; typedef std::less Compare; return relax(e, g, w, p, d, Combine(), Compare()); } } // namespace boost #endif /* BOOST_GRAPH_RELAX_HPP */ reverse_graph.hpp000444000765000024 5035212161110615 22754 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// (C) Copyright David Abrahams 2000. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef REVERSE_GRAPH_DWA092300_H_ # define REVERSE_GRAPH_DWA092300_H_ #include #include #include #include #include #include #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // Stay out of the way of the concept checking class # define BidirectionalGraph BidirectionalGraph_ #endif namespace boost { struct reverse_graph_tag { }; namespace detail { template class reverse_graph_edge_descriptor { public: EdgeDesc underlying_descx; // Odd name is because this needs to be public but shouldn't be exposed to users anymore private: typedef EdgeDesc base_descriptor_type; public: explicit reverse_graph_edge_descriptor(const EdgeDesc& underlying_descx = EdgeDesc()) : underlying_descx(underlying_descx) {} friend bool operator==(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { return a.underlying_descx == b.underlying_descx; } friend bool operator!=(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { return a.underlying_descx != b.underlying_descx; } friend bool operator<(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { return a.underlying_descx < b.underlying_descx; } friend bool operator>(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { return a.underlying_descx > b.underlying_descx; } friend bool operator<=(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { return a.underlying_descx <= b.underlying_descx; } friend bool operator>=(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { return a.underlying_descx >= b.underlying_descx; } }; template struct reverse_graph_edge_descriptor_maker { typedef reverse_graph_edge_descriptor result_type; reverse_graph_edge_descriptor operator()(const EdgeDesc& ed) const { return reverse_graph_edge_descriptor(ed); } }; template std::pair, Iter>, transform_iterator, Iter> > reverse_edge_iter_pair(const std::pair& ip) { return std::make_pair(make_transform_iterator(ip.first, reverse_graph_edge_descriptor_maker()), make_transform_iterator(ip.second, reverse_graph_edge_descriptor_maker())); } // Get the underlying descriptor from a vertex or edge descriptor template struct get_underlying_descriptor_from_reverse_descriptor { typedef Desc type; static Desc convert(const Desc& d) {return d;} }; template struct get_underlying_descriptor_from_reverse_descriptor > { typedef Desc type; static Desc convert(const reverse_graph_edge_descriptor& d) {return d.underlying_descx;} }; template struct choose_rev_edge_iter { }; template <> struct choose_rev_edge_iter { template struct bind_ { typedef transform_iterator::edge_descriptor>, typename graph_traits::edge_iterator> type; }; }; template <> struct choose_rev_edge_iter { template struct bind_ { typedef void type; }; }; } // namespace detail template class reverse_graph { typedef reverse_graph Self; typedef graph_traits Traits; public: typedef BidirectionalGraph base_type; typedef GraphRef base_ref_type; // Constructor reverse_graph(GraphRef g) : m_g(g) {} // Graph requirements typedef typename Traits::vertex_descriptor vertex_descriptor; typedef detail::reverse_graph_edge_descriptor edge_descriptor; typedef typename Traits::directed_category directed_category; typedef typename Traits::edge_parallel_category edge_parallel_category; typedef typename Traits::traversal_category traversal_category; // IncidenceGraph requirements typedef transform_iterator, typename Traits::in_edge_iterator> out_edge_iterator; typedef typename Traits::degree_size_type degree_size_type; // BidirectionalGraph requirements typedef transform_iterator, typename Traits::out_edge_iterator> in_edge_iterator; // AdjacencyGraph requirements typedef typename adjacency_iterator_generator::type adjacency_iterator; // VertexListGraph requirements typedef typename Traits::vertex_iterator vertex_iterator; // EdgeListGraph requirements enum { is_edge_list = is_convertible::value }; typedef detail::choose_rev_edge_iter ChooseEdgeIter; typedef typename ChooseEdgeIter:: template bind_::type edge_iterator; typedef typename Traits::vertices_size_type vertices_size_type; typedef typename Traits::edges_size_type edges_size_type; typedef reverse_graph_tag graph_tag; #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES // Bundled properties support template typename graph::detail::bundled_result< BidirectionalGraph, typename detail::get_underlying_descriptor_from_reverse_descriptor::type >::type& operator[](Descriptor x) { return m_g[detail::get_underlying_descriptor_from_reverse_descriptor::convert(x)]; } template typename graph::detail::bundled_result< BidirectionalGraph, typename detail::get_underlying_descriptor_from_reverse_descriptor::type >::type const& operator[](Descriptor x) const { return m_g[detail::get_underlying_descriptor_from_reverse_descriptor::convert(x)]; } #endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES static vertex_descriptor null_vertex() { return Traits::null_vertex(); } // would be private, but template friends aren't portable enough. // private: GraphRef m_g; }; // These are separate so they are not instantiated unless used (see bug 1021) template struct vertex_property_type > { typedef typename boost::vertex_property_type::type type; }; template struct edge_property_type > { typedef typename boost::edge_property_type::type type; }; template struct graph_property_type > { typedef typename boost::graph_property_type::type type; }; #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES template struct vertex_bundle_type > : vertex_bundle_type { }; template struct edge_bundle_type > : edge_bundle_type { }; template struct graph_bundle_type > : graph_bundle_type { }; #endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES template inline reverse_graph make_reverse_graph(const BidirectionalGraph& g) { return reverse_graph(g); } template inline reverse_graph make_reverse_graph(BidirectionalGraph& g) { return reverse_graph(g); } template std::pair::vertex_iterator, typename reverse_graph::vertex_iterator> vertices(const reverse_graph& g) { return vertices(g.m_g); } template std::pair::edge_iterator, typename reverse_graph::edge_iterator> edges(const reverse_graph& g) { return detail::reverse_edge_iter_pair::edge_descriptor>(edges(g.m_g)); } template inline std::pair::out_edge_iterator, typename reverse_graph::out_edge_iterator> out_edges(const typename graph_traits::vertex_descriptor u, const reverse_graph& g) { return detail::reverse_edge_iter_pair::edge_descriptor>(in_edges(u, g.m_g)); } template inline typename graph_traits::vertices_size_type num_vertices(const reverse_graph& g) { return num_vertices(g.m_g); } template inline typename reverse_graph::edges_size_type num_edges(const reverse_graph& g) { return num_edges(g.m_g); } template inline typename graph_traits::degree_size_type out_degree(const typename graph_traits::vertex_descriptor u, const reverse_graph& g) { return in_degree(u, g.m_g); } template inline typename graph_traits::vertex_descriptor vertex(const typename graph_traits::vertices_size_type v, const reverse_graph& g) { return vertex(v, g.m_g); } template inline std::pair< typename graph_traits >::edge_descriptor, bool> edge(const typename graph_traits::vertex_descriptor u, const typename graph_traits::vertex_descriptor v, const reverse_graph& g) { typedef typename graph_traits::edge_descriptor underlying_edge_descriptor; std::pair e = edge(v, u, g.m_g); return std::make_pair(detail::reverse_graph_edge_descriptor(e.first), e.second); } template inline std::pair::in_edge_iterator, typename reverse_graph::in_edge_iterator> in_edges(const typename graph_traits::vertex_descriptor u, const reverse_graph& g) { return detail::reverse_edge_iter_pair::edge_descriptor>(out_edges(u, g.m_g)); } template inline std::pair::adjacency_iterator, typename reverse_graph::adjacency_iterator> adjacent_vertices(typename graph_traits::vertex_descriptor u, const reverse_graph& g) { typedef reverse_graph Graph; typename graph_traits::out_edge_iterator first, last; boost::tie(first, last) = out_edges(u, g); typedef typename graph_traits::adjacency_iterator adjacency_iterator; return std::make_pair(adjacency_iterator(first, const_cast(&g)), adjacency_iterator(last, const_cast(&g))); } template inline typename graph_traits::degree_size_type in_degree(const typename graph_traits::vertex_descriptor u, const reverse_graph& g) { return out_degree(u, g.m_g); } template inline typename graph_traits::vertex_descriptor source(const detail::reverse_graph_edge_descriptor& e, const reverse_graph& g) { return target(e.underlying_descx, g.m_g); } template inline typename graph_traits::vertex_descriptor target(const detail::reverse_graph_edge_descriptor& e, const reverse_graph& g) { return source(e.underlying_descx, g.m_g); } namespace detail { template struct reverse_graph_edge_property_map { private: PM underlying_pm; public: typedef reverse_graph_edge_descriptor::key_type> key_type; typedef typename property_traits::value_type value_type; typedef typename property_traits::reference reference; typedef typename property_traits::category category; explicit reverse_graph_edge_property_map(const PM& pm): underlying_pm(pm) {} friend reference get(const reverse_graph_edge_property_map& m, const key_type& e) { return get(m.underlying_pm, e.underlying_descx); } friend void put(const reverse_graph_edge_property_map& m, const key_type& e, const value_type& v) { put(m.underlying_pm, e.underlying_descx, v); } reference operator[](const key_type& k) const { return (this->underlying_pm)[k.underlying_descx]; } }; } // namespace detail template struct property_map, Property> { typedef boost::is_same::type, edge_property_tag> is_edge_prop; typedef typename property_map::type orig_type; typedef typename property_map::const_type orig_const_type; typedef typename boost::mpl::if_, orig_type>::type type; typedef typename boost::mpl::if_, orig_const_type>::type const_type; }; template struct property_map, Property> { typedef boost::is_same::type, edge_property_tag> is_edge_prop; typedef typename property_map::const_type orig_const_type; typedef typename boost::mpl::if_, orig_const_type>::type const_type; typedef const_type type; }; template typename disable_if< is_same, typename property_map, Property>::type>::type get(Property p, reverse_graph& g) { return typename property_map, Property>::type(get(p, g.m_g)); } template typename disable_if< is_same, typename property_map, Property>::const_type>::type get(Property p, const reverse_graph& g) { const BidirGraph& gref = g.m_g; // in case GRef is non-const return typename property_map, Property>::const_type(get(p, gref)); } template typename disable_if< is_same, typename property_traits< typename property_map, Property>::const_type >::value_type>::type get(Property p, const reverse_graph& g, const Key& k) { return get(get(p, g), k); } template void put(Property p, reverse_graph& g, const Key& k, const Value& val) { put(get(p, g), k, val); } // Get the underlying descriptor from a reverse_graph's wrapped edge descriptor namespace detail { template struct underlying_edge_desc_map_type { E operator[](const reverse_graph_edge_descriptor& k) const { return k.underlying_descx; } }; template E get(underlying_edge_desc_map_type m, const reverse_graph_edge_descriptor& k) { return m[k]; } } template struct property_traits > { typedef detail::reverse_graph_edge_descriptor key_type; typedef E value_type; typedef const E& reference; typedef readable_property_map_tag category; }; template struct property_map, edge_underlying_t> { private: typedef typename graph_traits::edge_descriptor ed; public: typedef detail::underlying_edge_desc_map_type type; typedef detail::underlying_edge_desc_map_type const_type; }; template struct is_reverse_graph: boost::mpl::false_ {}; template struct is_reverse_graph >: boost::mpl::true_ {}; template typename enable_if, detail::underlying_edge_desc_map_type::edge_descriptor> >::type get(edge_underlying_t, G&) { return detail::underlying_edge_desc_map_type::edge_descriptor>(); } template typename enable_if, typename graph_traits::edge_descriptor>::type get(edge_underlying_t, G&, const typename graph_traits::edge_descriptor& k) { return k.underlying_descx; } template typename enable_if, detail::underlying_edge_desc_map_type::edge_descriptor> >::type get(edge_underlying_t, const G&) { return detail::underlying_edge_desc_map_type::edge_descriptor>(); } template typename enable_if, typename graph_traits::edge_descriptor>::type get(edge_underlying_t, const G&, const typename graph_traits::edge_descriptor& k) { return k.underlying_descx; } // Access to wrapped graph's graph properties template inline void set_property(const reverse_graph& g, Tag tag, const Value& value) { set_property(g.m_g, tag, value); } template inline typename boost::mpl::if_< boost::is_const::type>, const typename graph_property::type&, typename graph_property::type& >::type get_property(const reverse_graph& g, Tag tag) { return get_property(g.m_g, tag); } } // namespace boost #endif two_bit_color_map.hpp000444000765000024 674712161110644 23615 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph// Copyright (C) 2005-2006 The Trustees of Indiana University. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Jeremiah Willcock // Douglas Gregor // Andrew Lumsdaine // Two bit per color property map #ifndef BOOST_TWO_BIT_COLOR_MAP_HPP #define BOOST_TWO_BIT_COLOR_MAP_HPP #include #include #include #include #include #include #include namespace boost { enum two_bit_color_type { two_bit_white = 0, two_bit_gray = 1, two_bit_green = 2, two_bit_black = 3 }; template <> struct color_traits { static two_bit_color_type white() { return two_bit_white; } static two_bit_color_type gray() { return two_bit_gray; } static two_bit_color_type green() { return two_bit_green; } static two_bit_color_type black() { return two_bit_black; } }; template struct two_bit_color_map { std::size_t n; IndexMap index; shared_array data; BOOST_STATIC_CONSTANT(int, bits_per_char = std::numeric_limits::digits); BOOST_STATIC_CONSTANT(int, elements_per_char = bits_per_char / 2); typedef typename property_traits::key_type key_type; typedef two_bit_color_type value_type; typedef void reference; typedef read_write_property_map_tag category; explicit two_bit_color_map(std::size_t n, const IndexMap& index = IndexMap()) : n(n), index(index), data(new unsigned char[(n + elements_per_char - 1) / elements_per_char]) { // Fill to white std::fill(data.get(), data.get() + (n + elements_per_char - 1) / elements_per_char, 0); } }; template inline two_bit_color_type get(const two_bit_color_map& pm, typename property_traits::key_type key) { BOOST_STATIC_CONSTANT(int, elements_per_char = two_bit_color_map::elements_per_char); typename property_traits::value_type i = get(pm.index, key); BOOST_ASSERT ((std::size_t)i < pm.n); std::size_t byte_num = i / elements_per_char; std::size_t bit_position = ((i % elements_per_char) * 2); return two_bit_color_type((pm.data.get()[byte_num] >> bit_position) & 3); } template inline void put(const two_bit_color_map& pm, typename property_traits::key_type key, two_bit_color_type value) { BOOST_STATIC_CONSTANT(int, elements_per_char = two_bit_color_map::elements_per_char); typename property_traits::value_type i = get(pm.index, key); BOOST_ASSERT ((std::size_t)i < pm.n); BOOST_ASSERT (value >= 0 && value < 4); std::size_t byte_num = i / elements_per_char; std::size_t bit_position = ((i % elements_per_char) * 2); pm.data.get()[byte_num] = (unsigned char) ((pm.data.get()[byte_num] & ~(3 << bit_position)) | (value << bit_position)); } template inline two_bit_color_map make_two_bit_color_map(std::size_t n, const IndexMap& index_map) { return two_bit_color_map(n, index_map); } } // end namespace boost #endif // BOOST_TWO_BIT_COLOR_MAP_HPP #ifdef BOOST_GRAPH_USE_MPI # include #endif visitors.hpp000444000765000024 2700212161110661 21777 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph//======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= // // Revision History: // 01 April 2001: Modified to use new header. (JMaddock) // #ifndef BOOST_GRAPH_GRAPH_SEARCH_VISITORS_HPP #define BOOST_GRAPH_GRAPH_SEARCH_VISITORS_HPP #include #include #include #include #include #include #include #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // Stay out of the way of the concept checking class # define Graph Graph_ #endif namespace boost { // This is a bit more convenient than std::numeric_limits because // you don't have to explicitly provide type T. template inline T numeric_limits_max(T) { return (std::numeric_limits::max)(); } //======================================================================== // Event Tags namespace detail { // For partial specialization workaround enum event_visitor_enum { on_no_event_num, on_initialize_vertex_num, on_start_vertex_num, on_discover_vertex_num, on_finish_vertex_num, on_examine_vertex_num, on_examine_edge_num, on_tree_edge_num, on_non_tree_edge_num, on_gray_target_num, on_black_target_num, on_forward_or_cross_edge_num, on_back_edge_num, on_edge_relaxed_num, on_edge_not_relaxed_num, on_edge_minimized_num, on_edge_not_minimized_num }; template struct functor_to_visitor : Visitor { typedef Event event_filter; functor_to_visitor(const Visitor& visitor) : Visitor(visitor) {} }; } // namespace detail struct on_no_event { enum { num = detail::on_no_event_num }; }; struct on_initialize_vertex { enum { num = detail::on_initialize_vertex_num }; }; struct on_start_vertex { enum { num = detail::on_start_vertex_num }; }; struct on_discover_vertex { enum { num = detail::on_discover_vertex_num }; }; struct on_examine_vertex { enum { num = detail::on_examine_vertex_num }; }; struct on_finish_vertex { enum { num = detail::on_finish_vertex_num }; }; struct on_examine_edge { enum { num = detail::on_examine_edge_num }; }; struct on_tree_edge { enum { num = detail::on_tree_edge_num }; }; struct on_non_tree_edge { enum { num = detail::on_non_tree_edge_num }; }; struct on_gray_target { enum { num = detail::on_gray_target_num }; }; struct on_black_target { enum { num = detail::on_black_target_num }; }; struct on_forward_or_cross_edge { enum { num = detail::on_forward_or_cross_edge_num }; }; struct on_back_edge { enum { num = detail::on_back_edge_num }; }; struct on_edge_relaxed { enum { num = detail::on_edge_relaxed_num }; }; struct on_edge_not_relaxed { enum { num = detail::on_edge_not_relaxed_num }; }; struct on_edge_minimized { enum { num = detail::on_edge_minimized_num }; }; struct on_edge_not_minimized { enum { num = detail::on_edge_not_minimized_num }; }; //======================================================================== // base_visitor and null_visitor // needed for MSVC workaround template struct base_visitor { typedef on_no_event event_filter; template void operator()(T, Graph&) { } }; struct null_visitor : public base_visitor { typedef on_no_event event_filter; template void operator()(T, Graph&) { } }; //======================================================================== // The invoke_visitors() function namespace detail { template inline void invoke_dispatch(Visitor& v, T x, Graph& g, mpl::true_) { v(x, g); } template inline void invoke_dispatch(Visitor&, T, Graph&, mpl::false_) { } } // namespace detail template inline void invoke_visitors(std::pair& vlist, T x, Graph& g, Tag tag) { typedef typename Visitor::event_filter Category; typedef typename is_same::type IsSameTag; detail::invoke_dispatch(vlist.first, x, g, IsSameTag()); invoke_visitors(vlist.second, x, g, tag); } #if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 template inline void invoke_visitors(base_visitor& vis, T x, Graph& g, Tag) { typedef typename Visitor::event_filter Category; typedef typename is_same::type IsSameTag; Visitor& v = static_cast(vis); detail::invoke_dispatch(v, x, g, IsSameTag()); } #else template inline void invoke_visitors(Visitor& v, T x, Graph& g, Tag) { typedef typename Visitor::event_filter Category; typedef typename is_same::type IsSameTag; detail::invoke_dispatch(v, x, g, IsSameTag()); } #endif //======================================================================== // predecessor_recorder template struct predecessor_recorder : public base_visitor > { typedef Tag event_filter; predecessor_recorder(PredecessorMap pa) : m_predecessor(pa) { } template void operator()(Edge e, const Graph& g) { put(m_predecessor, target(e, g), source(e, g)); } PredecessorMap m_predecessor; }; template predecessor_recorder record_predecessors(PredecessorMap pa, Tag) { return predecessor_recorder (pa); } //======================================================================== // edge_predecessor_recorder template struct edge_predecessor_recorder : public base_visitor > { typedef Tag event_filter; edge_predecessor_recorder(PredEdgeMap pa) : m_predecessor(pa) { } template void operator()(Edge e, const Graph& g) { put(m_predecessor, target(e, g), e); } PredEdgeMap m_predecessor; }; template edge_predecessor_recorder record_edge_predecessors(PredEdgeMap pa, Tag) { return edge_predecessor_recorder (pa); } //======================================================================== // distance_recorder template struct distance_recorder : public base_visitor > { typedef Tag event_filter; distance_recorder(DistanceMap pa) : m_distance(pa) { } template void operator()(Edge e, const Graph& g) { typename graph_traits::vertex_descriptor u = source(e, g), v = target(e, g); put(m_distance, v, get(m_distance, u) + 1); } DistanceMap m_distance; }; template distance_recorder record_distances(DistanceMap pa, Tag) { return distance_recorder (pa); } //======================================================================== // time_stamper template struct time_stamper : public base_visitor > { typedef Tag event_filter; time_stamper(TimeMap pa, TimeT& t) : m_time_pa(pa), m_time(t) { } template void operator()(Vertex u, const Graph&) { put(m_time_pa, u, ++m_time); } TimeMap m_time_pa; TimeT& m_time; }; template time_stamper stamp_times(TimeMap pa, TimeT& time_counter, Tag) { return time_stamper(pa, time_counter); } //======================================================================== // property_writer template struct property_writer : public base_visitor > { typedef Tag event_filter; property_writer(PA pa, OutputIterator out) : m_pa(pa), m_out(out) { } template void operator()(T x, Graph&) { *m_out++ = get(m_pa, x); } PA m_pa; OutputIterator m_out; }; template property_writer write_property(PA pa, OutputIterator out, Tag) { return property_writer(pa, out); } //======================================================================== // property_put /** * Functor which just sets a given value to a vertex or edge in a property map. */ template struct property_put { typedef EventTag event_filter; property_put (PropertyMap property_map, typename property_traits ::value_type value) : property_map_ (property_map), value_ (value) {} template void operator() (VertexOrEdge v, const Graph&) { put (property_map_, v, value_); } private: PropertyMap property_map_; typename property_traits ::value_type value_; }; /** * Creates a property_put functor which just sets a given value to a vertex or edge. * * @param property_map Given writeable property map * @param value Fixed value of the map * @param tag Event Filter * @return The functor. */ template inline property_put put_property (PropertyMap property_map, typename property_traits ::value_type value, EventTag) { return property_put (property_map, value); } #define BOOST_GRAPH_EVENT_STUB(Event,Kind) \ typedef ::boost::Event Event##_type; \ template \ Kind##_visitor, Visitors> > \ do_##Event(Visitor visitor) \ { \ typedef std::pair, \ Visitors> visitor_list; \ typedef Kind##_visitor result_type; \ return result_type(visitor_list(visitor, m_vis)); \ } } /* namespace boost */ #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // Stay out of the way of the concept checking class # undef Graph #endif #endif detail000755000765000024 012161110652 20470 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graphadj_list_edge_iterator.hpp000444000765000024 741412161110634 26032 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/detail// //======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= // #ifndef BOOST_GRAPH_DETAIL_ADJ_LIST_EDGE_ITERATOR_HPP #define BOOST_GRAPH_DETAIL_ADJ_LIST_EDGE_ITERATOR_HPP #include #include #include #if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) # define BOOST_GRAPH_NO_OPTIONAL #endif #ifdef BOOST_GRAPH_NO_OPTIONAL # define BOOST_GRAPH_MEMBER . #else # define BOOST_GRAPH_MEMBER -> # include #endif // ndef BOOST_GRAPH_NO_OPTIONAL namespace boost { namespace detail { template class adj_list_edge_iterator { typedef adj_list_edge_iterator self; public: typedef std::forward_iterator_tag iterator_category; typedef typename OutEdgeIterator::value_type value_type; typedef typename OutEdgeIterator::reference reference; typedef typename OutEdgeIterator::pointer pointer; typedef typename OutEdgeIterator::difference_type difference_type; typedef difference_type distance_type; inline adj_list_edge_iterator() {} inline adj_list_edge_iterator(const self& x) : vBegin(x.vBegin), vCurr(x.vCurr), vEnd(x.vEnd), edges(x.edges), m_g(x.m_g) { } template inline adj_list_edge_iterator(VertexIterator b, VertexIterator c, VertexIterator e, const G& g) : vBegin(b), vCurr(c), vEnd(e), m_g(&g) { if ( vCurr != vEnd ) { while ( vCurr != vEnd && out_degree(*vCurr, *m_g) == 0 ) ++vCurr; if ( vCurr != vEnd ) edges = out_edges(*vCurr, *m_g); } } /*Note: In the directed graph cases, it is fine. For undirected graphs, one edge go through twice. */ inline self& operator++() { ++edges BOOST_GRAPH_MEMBER first; if (edges BOOST_GRAPH_MEMBER first == edges BOOST_GRAPH_MEMBER second) { ++vCurr; while ( vCurr != vEnd && out_degree(*vCurr, *m_g) == 0 ) ++vCurr; if ( vCurr != vEnd ) edges = out_edges(*vCurr, *m_g); } return *this; } inline self operator++(int) { self tmp = *this; ++(*this); return tmp; } inline value_type operator*() const { return *edges BOOST_GRAPH_MEMBER first; } inline bool operator==(const self& x) const { return vCurr == x.vCurr && (vCurr == vEnd || edges BOOST_GRAPH_MEMBER first == x.edges BOOST_GRAPH_MEMBER first); } inline bool operator!=(const self& x) const { return vCurr != x.vCurr || (vCurr != vEnd && edges BOOST_GRAPH_MEMBER first != x.edges BOOST_GRAPH_MEMBER first); } protected: VertexIterator vBegin; VertexIterator vCurr; VertexIterator vEnd; #ifdef BOOST_GRAPH_NO_OPTIONAL std::pair edges; #else boost::optional > edges; #endif // ndef BOOST_GRAPH_NO_OPTIONAL const Graph* m_g; }; } // namespace detail } #undef BOOST_GRAPH_MEMBER #endif // BOOST_GRAPH_DETAIL_ADJ_LIST_EDGE_ITERATOR_HPP adjacency_list.hpp000444000765000024 32475512161110652 24372 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/detail// -*- c++ -*- //======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Copyright 2010 Thomas Claveirole // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_DETAIL_ADJACENCY_LIST_HPP #define BOOST_GRAPH_DETAIL_ADJACENCY_LIST_HPP #include // for vertex_map in copy_impl #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* Outline for this file: out_edge_iterator and in_edge_iterator implementation edge_iterator for undirected graph stored edge types (these object live in the out-edge/in-edge lists) directed edges helper class directed graph helper class undirected graph helper class bidirectional graph helper class bidirectional graph helper class (without edge properties) bidirectional graph helper class (with edge properties) adjacency_list helper class adj_list_impl class vec_adj_list_impl class adj_list_gen class vertex property map edge property map Note: it would be nice to merge some of the undirected and bidirectional code... it is awful similar. */ namespace boost { namespace detail { template struct directed_category_traits { typedef directed_tag directed_category; }; template <> struct directed_category_traits { typedef directed_tag directed_category; }; template <> struct directed_category_traits { typedef undirected_tag directed_category; }; template <> struct directed_category_traits { typedef bidirectional_tag directed_category; }; template struct target_is { target_is(const Vertex& v) : m_target(v) { } template bool operator()(const StoredEdge& e) const { return e.get_target() == m_target; } Vertex m_target; }; // O(E/V) template void erase_from_incidence_list(EdgeList& el, vertex_descriptor v, allow_parallel_edge_tag) { boost::graph_detail::erase_if(el, detail::target_is(v)); } // O(log(E/V)) template void erase_from_incidence_list(EdgeList& el, vertex_descriptor v, disallow_parallel_edge_tag) { typedef typename EdgeList::value_type StoredEdge; el.erase(StoredEdge(v)); } //========================================================================= // Out-Edge and In-Edge Iterator Implementation template struct out_edge_iter : iterator_adaptor< out_edge_iter , BaseIter , EdgeDescriptor , use_default , EdgeDescriptor , Difference > { typedef iterator_adaptor< out_edge_iter , BaseIter , EdgeDescriptor , use_default , EdgeDescriptor , Difference > super_t; inline out_edge_iter() { } inline out_edge_iter(const BaseIter& i, const VertexDescriptor& src) : super_t(i), m_src(src) { } inline EdgeDescriptor dereference() const { return EdgeDescriptor(m_src, (*this->base()).get_target(), &(*this->base()).get_property()); } VertexDescriptor m_src; }; template struct in_edge_iter : iterator_adaptor< in_edge_iter , BaseIter , EdgeDescriptor , use_default , EdgeDescriptor , Difference > { typedef iterator_adaptor< in_edge_iter , BaseIter , EdgeDescriptor , use_default , EdgeDescriptor , Difference > super_t; inline in_edge_iter() { } inline in_edge_iter(const BaseIter& i, const VertexDescriptor& src) : super_t(i), m_src(src) { } inline EdgeDescriptor dereference() const { return EdgeDescriptor((*this->base()).get_target(), m_src, &this->base()->get_property()); } VertexDescriptor m_src; }; //========================================================================= // Undirected Edge Iterator Implementation template struct undirected_edge_iter : iterator_adaptor< undirected_edge_iter , EdgeIter , EdgeDescriptor , use_default , EdgeDescriptor , Difference > { typedef iterator_adaptor< undirected_edge_iter , EdgeIter , EdgeDescriptor , use_default , EdgeDescriptor , Difference > super_t; undirected_edge_iter() {} explicit undirected_edge_iter(EdgeIter i) : super_t(i) {} inline EdgeDescriptor dereference() const { return EdgeDescriptor( (*this->base()).m_source , (*this->base()).m_target , &this->base()->get_property()); } }; //========================================================================= // Edge Storage Types (stored in the out-edge/in-edge lists) template class stored_edge : public boost::equality_comparable1< stored_edge, boost::less_than_comparable1< stored_edge > > { public: typedef no_property property_type; inline stored_edge() { } inline stored_edge(Vertex target, const no_property& = no_property()) : m_target(target) { } // Need to write this explicitly so stored_edge_property can // invoke Base::operator= (at least, for SGI MIPSPro compiler) inline stored_edge& operator=(const stored_edge& x) { m_target = x.m_target; return *this; } inline Vertex& get_target() const { return m_target; } inline const no_property& get_property() const { return s_prop; } inline bool operator==(const stored_edge& x) const { return m_target == x.get_target(); } inline bool operator<(const stored_edge& x) const { return m_target < x.get_target(); } //protected: need to add hash<> as a friend static no_property s_prop; // Sometimes target not used as key in the set, and in that case // it is ok to change the target. mutable Vertex m_target; }; template no_property stored_edge::s_prop; template class stored_edge_property : public stored_edge { typedef stored_edge_property self; typedef stored_edge Base; public: typedef Property property_type; inline stored_edge_property() { } inline stored_edge_property(Vertex target, const Property& p = Property()) : stored_edge(target), m_property(new Property(p)) { } stored_edge_property(const self& x) : Base(x), m_property(const_cast(x).m_property) { } self& operator=(const self& x) { Base::operator=(x); m_property = const_cast(x).m_property; return *this; } inline Property& get_property() { return *m_property; } inline const Property& get_property() const { return *m_property; } protected: // Holding the property by-value causes edge-descriptor // invalidation for add_edge() with EdgeList=vecS. Instead we // hold a pointer to the property. std::auto_ptr is not // a perfect fit for the job, but it is darn close. std::auto_ptr m_property; }; template class stored_edge_iter : public stored_edge { public: typedef Property property_type; inline stored_edge_iter() { } inline stored_edge_iter(Vertex v) : stored_edge(v) { } inline stored_edge_iter(Vertex v, Iter i, void* = 0) : stored_edge(v), m_iter(i) { } inline Property& get_property() { return m_iter->get_property(); } inline const Property& get_property() const { return m_iter->get_property(); } inline Iter get_iter() const { return m_iter; } protected: Iter m_iter; }; // For when the EdgeList is a std::vector. // Want to make the iterator stable, so use an offset // instead of an iterator into a std::vector template class stored_ra_edge_iter : public stored_edge { typedef typename EdgeVec::iterator Iter; public: typedef Property property_type; inline stored_ra_edge_iter() { } inline explicit stored_ra_edge_iter(Vertex v) // Only used for comparisons : stored_edge(v), m_i(0), m_vec(0){ } inline stored_ra_edge_iter(Vertex v, Iter i, EdgeVec* edge_vec) : stored_edge(v), m_i(i - edge_vec->begin()), m_vec(edge_vec){ } inline Property& get_property() { BOOST_ASSERT ((m_vec != 0)); return (*m_vec)[m_i].get_property(); } inline const Property& get_property() const { BOOST_ASSERT ((m_vec != 0)); return (*m_vec)[m_i].get_property(); } inline Iter get_iter() const { BOOST_ASSERT ((m_vec != 0)); return m_vec->begin() + m_i; } protected: std::size_t m_i; EdgeVec* m_vec; }; } // namespace detail template const typename property_value::type& get(Tag property_tag, const detail::stored_edge_property& e) { return get_property_value(e.get_property(), property_tag); } template const typename property_value::type& get(Tag property_tag, const detail::stored_edge_iter& e) { return get_property_value(e.get_property(), property_tag); } template const typename property_value::type& get(Tag property_tag, const detail::stored_ra_edge_iter& e) { return get_property_value(e.get_property(), property_tag); } //========================================================================= // Directed Edges Helper Class namespace detail { // O(E/V) template inline void remove_directed_edge_dispatch(edge_descriptor, EdgeList& el, StoredProperty& p) { for (typename EdgeList::iterator i = el.begin(); i != el.end(); ++i) if (&(*i).get_property() == &p) { el.erase(i); return; } } template inline void remove_directed_edge_if_dispatch(incidence_iterator first, incidence_iterator last, EdgeList& el, Predicate pred, boost::allow_parallel_edge_tag) { // remove_if while (first != last && !pred(*first)) ++first; incidence_iterator i = first; if (first != last) for (++i; i != last; ++i) if (!pred(*i)) { *first.base() = *i.base(); ++first; } el.erase(first.base(), el.end()); } template inline void remove_directed_edge_if_dispatch(incidence_iterator first, incidence_iterator last, EdgeList& el, Predicate pred, boost::disallow_parallel_edge_tag) { for (incidence_iterator next = first; first != last; first = next) { ++next; if (pred(*first)) el.erase( first.base() ); } } template inline void undirected_remove_out_edge_if_dispatch(Graph& g, incidence_iterator first, incidence_iterator last, EdgeList& el, Predicate pred, boost::allow_parallel_edge_tag) { typedef typename Graph::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); // remove_if while (first != last && !pred(*first)) ++first; incidence_iterator i = first; bool self_loop_removed = false; if (first != last) for (; i != last; ++i) { if (self_loop_removed) { /* With self loops, the descriptor will show up * twice. The first time it will be removed, and now it * will be skipped. */ self_loop_removed = false; } else if (!pred(*i)) { *first.base() = *i.base(); ++first; } else { if (source(*i, g) == target(*i, g)) self_loop_removed = true; else { // Remove the edge from the target detail::remove_directed_edge_dispatch (*i, g.out_edge_list(target(*i, g)), *(PropT*)(*i).get_property()); } // Erase the edge property g.m_edges.erase( (*i.base()).get_iter() ); } } el.erase(first.base(), el.end()); } template inline void undirected_remove_out_edge_if_dispatch(Graph& g, incidence_iterator first, incidence_iterator last, EdgeList& el, Predicate pred, boost::disallow_parallel_edge_tag) { typedef typename Graph::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); for (incidence_iterator next = first; first != last; first = next) { ++next; if (pred(*first)) { if (source(*first, g) != target(*first, g)) { // Remove the edge from the target detail::remove_directed_edge_dispatch (*first, g.out_edge_list(target(*first, g)), *(PropT*)(*first).get_property()); } // Erase the edge property g.m_edges.erase( (*first.base()).get_iter() ); // Erase the edge in the source el.erase( first.base() ); } } } // O(E/V) template inline void remove_directed_edge_dispatch(edge_descriptor e, EdgeList& el, no_property&) { for (typename EdgeList::iterator i = el.begin(); i != el.end(); ++i) if ((*i).get_target() == e.m_target) { el.erase(i); return; } } } // namespace detail template struct directed_edges_helper { // Placement of these overloaded remove_edge() functions // inside the class avoids a VC++ bug. // O(E/V) inline void remove_edge(typename Config::edge_descriptor e) { typedef typename Config::graph_type graph_type; graph_type& g = static_cast(*this); typename Config::OutEdgeList& el = g.out_edge_list(source(e, g)); typedef typename Config::OutEdgeList::value_type::property_type PType; detail::remove_directed_edge_dispatch(e, el, *(PType*)e.get_property()); } // O(1) inline void remove_edge(typename Config::out_edge_iterator iter) { typedef typename Config::graph_type graph_type; graph_type& g = static_cast(*this); typename Config::edge_descriptor e = *iter; typename Config::OutEdgeList& el = g.out_edge_list(source(e, g)); el.erase(iter.base()); } }; // O(1) template inline std::pair edges(const directed_edges_helper& g_) { typedef typename Config::graph_type graph_type; typedef typename Config::edge_iterator edge_iterator; const graph_type& cg = static_cast(g_); graph_type& g = const_cast(cg); return std::make_pair( edge_iterator(g.vertex_set().begin(), g.vertex_set().begin(), g.vertex_set().end(), g), edge_iterator(g.vertex_set().begin(), g.vertex_set().end(), g.vertex_set().end(), g) ); } //========================================================================= // Directed Graph Helper Class struct adj_list_dir_traversal_tag : public virtual vertex_list_graph_tag, public virtual incidence_graph_tag, public virtual adjacency_graph_tag, public virtual edge_list_graph_tag { }; template struct directed_graph_helper : public directed_edges_helper { typedef typename Config::edge_descriptor edge_descriptor; typedef adj_list_dir_traversal_tag traversal_category; }; // O(E/V) template inline void remove_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, directed_graph_helper& g_) { typedef typename Config::graph_type graph_type; typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(g_); detail::erase_from_incidence_list(g.out_edge_list(u), v, Cat()); } template inline void remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred, directed_graph_helper& g_) { typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); typename Config::out_edge_iterator first, last; boost::tie(first, last) = out_edges(u, g); typedef typename Config::edge_parallel_category edge_parallel_category; detail::remove_directed_edge_if_dispatch (first, last, g.out_edge_list(u), pred, edge_parallel_category()); } template inline void remove_edge_if(Predicate pred, directed_graph_helper& g_) { typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); typename Config::vertex_iterator vi, vi_end; for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) remove_out_edge_if(*vi, pred, g); } template inline void remove_edge(EdgeOrIter e_or_iter, directed_graph_helper& g_) { g_.remove_edge(e_or_iter); } // O(V + E) for allow_parallel_edges // O(V * log(E/V)) for disallow_parallel_edges template inline void clear_vertex(typename Config::vertex_descriptor u, directed_graph_helper& g_) { typedef typename Config::graph_type graph_type; typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(g_); typename Config::vertex_iterator vi, viend; for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi) detail::erase_from_incidence_list(g.out_edge_list(*vi), u, Cat()); g.out_edge_list(u).clear(); // clear() should be a req of Sequence and AssociativeContainer, // or maybe just Container } template inline void clear_out_edges(typename Config::vertex_descriptor u, directed_graph_helper& g_) { typedef typename Config::graph_type graph_type; typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(g_); g.out_edge_list(u).clear(); // clear() should be a req of Sequence and AssociativeContainer, // or maybe just Container } // O(V), could do better... template inline typename Config::edges_size_type num_edges(const directed_graph_helper& g_) { typedef typename Config::graph_type graph_type; const graph_type& g = static_cast(g_); typename Config::edges_size_type num_e = 0; typename Config::vertex_iterator vi, vi_end; for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) num_e += out_degree(*vi, g); return num_e; } // O(1) for allow_parallel_edge_tag // O(log(E/V)) for disallow_parallel_edge_tag template inline std::pair::edge_descriptor, bool> add_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, const typename Config::edge_property_type& p, directed_graph_helper& g_) { typedef typename Config::edge_descriptor edge_descriptor; typedef typename Config::graph_type graph_type; typedef typename Config::StoredEdge StoredEdge; graph_type& g = static_cast(g_); typename Config::OutEdgeList::iterator i; bool inserted; boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u), StoredEdge(v, p)); return std::make_pair(edge_descriptor(u, v, &(*i).get_property()), inserted); } // Did not use default argument here because that // causes Visual C++ to get confused. template inline std::pair add_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, directed_graph_helper& g_) { typename Config::edge_property_type p; return add_edge(u, v, p, g_); } //========================================================================= // Undirected Graph Helper Class template struct undirected_graph_helper; struct undir_adj_list_traversal_tag : public virtual vertex_list_graph_tag, public virtual incidence_graph_tag, public virtual adjacency_graph_tag, public virtual edge_list_graph_tag, public virtual bidirectional_graph_tag { }; namespace detail { // using class with specialization for dispatch is a VC++ workaround. template struct remove_undirected_edge_dispatch { // O(E/V) template static void apply(edge_descriptor e, undirected_graph_helper& g_, StoredProperty& p) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g)); typename Config::OutEdgeList::iterator out_i = out_el.begin(); typename Config::EdgeIter edge_iter_to_erase; for (; out_i != out_el.end(); ++out_i) if (&(*out_i).get_property() == &p) { edge_iter_to_erase = (*out_i).get_iter(); out_el.erase(out_i); break; } typename Config::OutEdgeList& in_el = g.out_edge_list(target(e, g)); typename Config::OutEdgeList::iterator in_i = in_el.begin(); for (; in_i != in_el.end(); ++in_i) if (&(*in_i).get_property() == &p) { in_el.erase(in_i); break; } g.m_edges.erase(edge_iter_to_erase); } }; template <> struct remove_undirected_edge_dispatch { // O(E/V) template static void apply(edge_descriptor e, undirected_graph_helper& g_, no_property&) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); no_property* p = (no_property*)e.get_property(); typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g)); typename Config::OutEdgeList::iterator out_i = out_el.begin(); typename Config::EdgeIter edge_iter_to_erase; for (; out_i != out_el.end(); ++out_i) if (&(*out_i).get_property() == p) { edge_iter_to_erase = (*out_i).get_iter(); out_el.erase(out_i); break; } typename Config::OutEdgeList& in_el = g.out_edge_list(target(e, g)); typename Config::OutEdgeList::iterator in_i = in_el.begin(); for (; in_i != in_el.end(); ++in_i) if (&(*in_i).get_property() == p) { in_el.erase(in_i); break; } g.m_edges.erase(edge_iter_to_erase); } }; // O(E/V) template inline void remove_edge_and_property(Graph& g, EdgeList& el, Vertex v, boost::allow_parallel_edge_tag cat) { typedef typename Graph::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename EdgeList::value_type StoredEdge; typename EdgeList::iterator i = el.begin(), end = el.end(); for (; i != end; ++i) { if ((*i).get_target() == v) { // NOTE: Wihtout this skip, this loop will double-delete properties // of loop edges. This solution is based on the observation that // the incidence edges of a vertex with a loop are adjacent in the // out edge list. This *may* actually hold for multisets also. bool skip = (boost::next(i) != end && i->get_iter() == boost::next(i)->get_iter()); g.m_edges.erase((*i).get_iter()); if (skip) ++i; } } detail::erase_from_incidence_list(el, v, cat); } // O(log(E/V)) template inline void remove_edge_and_property(Graph& g, EdgeList& el, Vertex v, boost::disallow_parallel_edge_tag) { typedef typename Graph::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename EdgeList::value_type StoredEdge; typename EdgeList::iterator i = el.find(StoredEdge(v)), end = el.end(); BOOST_ASSERT ((i != end)); if (i != end) { g.m_edges.erase((*i).get_iter()); el.erase(i); } } } // namespace detail template struct list_edge // short name due to VC++ truncation and linker problems : public boost::detail::edge_base { typedef EdgeProperty property_type; typedef boost::detail::edge_base Base; list_edge(Vertex u, Vertex v, const EdgeProperty& p = EdgeProperty()) : Base(u, v), m_property(p) { } EdgeProperty& get_property() { return m_property; } const EdgeProperty& get_property() const { return m_property; } // the following methods should never be used, but are needed // to make SGI MIPSpro C++ happy list_edge() { } bool operator==(const list_edge&) const { return false; } bool operator<(const list_edge&) const { return false; } EdgeProperty m_property; }; template struct undirected_graph_helper { typedef undir_adj_list_traversal_tag traversal_category; // Placement of these overloaded remove_edge() functions // inside the class avoids a VC++ bug. // O(E/V) inline void remove_edge(typename Config::edge_descriptor e) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::OutEdgeList::value_type::property_type PType; detail::remove_undirected_edge_dispatch::apply (e, *this, *(PType*)e.get_property()); } // O(E/V) inline void remove_edge(typename Config::out_edge_iterator iter) { this->remove_edge(*iter); } }; // Had to make these non-members to avoid accidental instantiation // on SGI MIPSpro C++ template inline typename C::InEdgeList& in_edge_list(undirected_graph_helper&, typename C::vertex_descriptor v) { typename C::stored_vertex* sv = (typename C::stored_vertex*)v; return sv->m_out_edges; } template inline const typename C::InEdgeList& in_edge_list(const undirected_graph_helper&, typename C::vertex_descriptor v) { typename C::stored_vertex* sv = (typename C::stored_vertex*)v; return sv->m_out_edges; } // O(E/V) template inline void remove_edge(EdgeOrIter e, undirected_graph_helper& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); g_.remove_edge(e); } // O(E/V) or O(log(E/V)) template void remove_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, undirected_graph_helper& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); typedef typename Config::edge_parallel_category Cat; detail::remove_edge_and_property(g, g.out_edge_list(u), v, Cat()); detail::erase_from_incidence_list(g.out_edge_list(v), u, Cat()); } template void remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred, undirected_graph_helper& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; typedef typename Config::OutEdgeList::value_type::property_type PropT; graph_type& g = static_cast(g_); typename Config::out_edge_iterator first, last; boost::tie(first, last) = out_edges(u, g); typedef typename Config::edge_parallel_category Cat; detail::undirected_remove_out_edge_if_dispatch (g, first, last, g.out_edge_list(u), pred, Cat()); } template void remove_in_edge_if(typename Config::vertex_descriptor u, Predicate pred, undirected_graph_helper& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); remove_out_edge_if(u, pred, g_); } // O(E/V * E) or O(log(E/V) * E) template void remove_edge_if(Predicate pred, undirected_graph_helper& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); typename Config::edge_iterator ei, ei_end, next; boost::tie(ei, ei_end) = edges(g); for (next = ei; ei != ei_end; ei = next) { ++next; if (pred(*ei)) remove_edge(*ei, g); } } // O(1) template inline std::pair edges(const undirected_graph_helper& g_) { typedef typename Config::graph_type graph_type; typedef typename Config::edge_iterator edge_iterator; const graph_type& cg = static_cast(g_); graph_type& g = const_cast(cg); return std::make_pair( edge_iterator(g.m_edges.begin()), edge_iterator(g.m_edges.end()) ); } // O(1) template inline typename Config::edges_size_type num_edges(const undirected_graph_helper& g_) { typedef typename Config::graph_type graph_type; const graph_type& g = static_cast(g_); return g.m_edges.size(); } // O(E/V * E/V) template inline void clear_vertex(typename Config::vertex_descriptor u, undirected_graph_helper& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(g_); while (true) { typename Config::out_edge_iterator ei, ei_end; boost::tie(ei, ei_end) = out_edges(u, g); if (ei == ei_end) break; remove_edge(*ei, g); } } // O(1) for allow_parallel_edge_tag // O(log(E/V)) for disallow_parallel_edge_tag template inline std::pair add_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, const typename Config::edge_property_type& p, undirected_graph_helper& g_) { typedef typename Config::StoredEdge StoredEdge; typedef typename Config::edge_descriptor edge_descriptor; typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); bool inserted; typename Config::EdgeContainer::value_type e(u, v, p); typename Config::EdgeContainer::iterator p_iter = graph_detail::push(g.m_edges, e).first; typename Config::OutEdgeList::iterator i; boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u), StoredEdge(v, p_iter, &g.m_edges)); if (inserted) { boost::graph_detail::push(g.out_edge_list(v), StoredEdge(u, p_iter, &g.m_edges)); return std::make_pair(edge_descriptor(u, v, &p_iter->get_property()), true); } else { g.m_edges.erase(p_iter); return std::make_pair (edge_descriptor(u, v, &i->get_iter()->get_property()), false); } } template inline std::pair add_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, undirected_graph_helper& g_) { typename Config::edge_property_type p; return add_edge(u, v, p, g_); } // O(1) template inline typename Config::degree_size_type degree(typename Config::vertex_descriptor u, const undirected_graph_helper& g_) { typedef typename Config::graph_type Graph; const Graph& g = static_cast(g_); return out_degree(u, g); } template inline std::pair in_edges(typename Config::vertex_descriptor u, const undirected_graph_helper& g_) { typedef typename Config::graph_type Graph; const Graph& cg = static_cast(g_); Graph& g = const_cast(cg); typedef typename Config::in_edge_iterator in_edge_iterator; return std::make_pair(in_edge_iterator(g.out_edge_list(u).begin(), u), in_edge_iterator(g.out_edge_list(u).end(), u)); } template inline typename Config::degree_size_type in_degree(typename Config::vertex_descriptor u, const undirected_graph_helper& g_) { return degree(u, g_); } //========================================================================= // Bidirectional Graph Helper Class struct bidir_adj_list_traversal_tag : public virtual vertex_list_graph_tag, public virtual incidence_graph_tag, public virtual adjacency_graph_tag, public virtual edge_list_graph_tag, public virtual bidirectional_graph_tag { }; template struct bidirectional_graph_helper : public directed_edges_helper { typedef bidir_adj_list_traversal_tag traversal_category; }; // Had to make these non-members to avoid accidental instantiation // on SGI MIPSpro C++ template inline typename C::InEdgeList& in_edge_list(bidirectional_graph_helper&, typename C::vertex_descriptor v) { typename C::stored_vertex* sv = (typename C::stored_vertex*)v; return sv->m_in_edges; } template inline const typename C::InEdgeList& in_edge_list(const bidirectional_graph_helper&, typename C::vertex_descriptor v) { typename C::stored_vertex* sv = (typename C::stored_vertex*)v; return sv->m_in_edges; } template inline void remove_edge_if(Predicate pred, bidirectional_graph_helper& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); typename Config::edge_iterator ei, ei_end, next; boost::tie(ei, ei_end) = edges(g); for (next = ei; ei != ei_end; ei = next) { ++next; if (pred(*ei)) remove_edge(*ei, g); } } template inline std::pair in_edges(typename Config::vertex_descriptor u, const bidirectional_graph_helper& g_) { typedef typename Config::graph_type graph_type; const graph_type& cg = static_cast(g_); graph_type& g = const_cast(cg); typedef typename Config::in_edge_iterator in_edge_iterator; return std::make_pair(in_edge_iterator(in_edge_list(g, u).begin(), u), in_edge_iterator(in_edge_list(g, u).end(), u)); } // O(1) template inline std::pair edges(const bidirectional_graph_helper& g_) { typedef typename Config::graph_type graph_type; typedef typename Config::edge_iterator edge_iterator; const graph_type& cg = static_cast(g_); graph_type& g = const_cast(cg); return std::make_pair( edge_iterator(g.m_edges.begin()), edge_iterator(g.m_edges.end()) ); } //========================================================================= // Bidirectional Graph Helper Class (with edge properties) template struct bidirectional_graph_helper_with_property : public bidirectional_graph_helper { typedef typename Config::graph_type graph_type; typedef typename Config::out_edge_iterator out_edge_iterator; std::pair get_parallel_edge_sublist(typename Config::edge_descriptor e, const graph_type& g, void*) { return out_edges(source(e, g), g); } std::pair get_parallel_edge_sublist(typename Config::edge_descriptor e, const graph_type& g, setS*) { return edge_range(source(e, g), target(e, g), g); } std::pair get_parallel_edge_sublist(typename Config::edge_descriptor e, const graph_type& g, multisetS*) { return edge_range(source(e, g), target(e, g), g); } std::pair get_parallel_edge_sublist(typename Config::edge_descriptor e, const graph_type& g, hash_setS*) { return edge_range(source(e, g), target(e, g), g); } // Placement of these overloaded remove_edge() functions // inside the class avoids a VC++ bug. // O(E/V) or O(log(E/V)) void remove_edge(typename Config::edge_descriptor e) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); graph_type& g = static_cast(*this); typedef typename Config::edgelist_selector OutEdgeListS; std::pair rng = get_parallel_edge_sublist(e, g, (OutEdgeListS*)(0)); rng.first = std::find(rng.first, rng.second, e); BOOST_ASSERT(rng.first != rng.second); remove_edge(rng.first); } inline void remove_edge(typename Config::out_edge_iterator iter) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; graph_type& g = static_cast(*this); typename Config::edge_descriptor e = *iter; typename Config::OutEdgeList& oel = g.out_edge_list(source(e, g)); typename Config::InEdgeList& iel = in_edge_list(g, target(e, g)); typedef typename Config::OutEdgeList::value_type::property_type PType; PType& p = *(PType*)e.get_property(); detail::remove_directed_edge_dispatch(*iter, iel, p); g.m_edges.erase(iter.base()->get_iter()); oel.erase(iter.base()); } }; // O(E/V) for allow_parallel_edge_tag // O(log(E/V)) for disallow_parallel_edge_tag template inline void remove_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, bidirectional_graph_helper_with_property& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); typedef typename Config::edge_parallel_category Cat; detail::remove_edge_and_property(g, g.out_edge_list(u), v, Cat()); detail::erase_from_incidence_list(in_edge_list(g, v), u, Cat()); } // O(E/V) or O(log(E/V)) template inline void remove_edge(EdgeOrIter e, bidirectional_graph_helper_with_property& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); g_.remove_edge(e); } template inline void remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred, bidirectional_graph_helper_with_property& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; typedef typename Config::OutEdgeList::value_type::property_type PropT; graph_type& g = static_cast(g_); typedef typename Config::EdgeIter EdgeIter; typedef std::vector Garbage; Garbage garbage; // First remove the edges from the targets' in-edge lists and // from the graph's edge set list. typename Config::out_edge_iterator out_i, out_end; for (boost::tie(out_i, out_end) = out_edges(u, g); out_i != out_end; ++out_i) if (pred(*out_i)) { detail::remove_directed_edge_dispatch (*out_i, in_edge_list(g, target(*out_i, g)), *(PropT*)(*out_i).get_property()); // Put in garbage to delete later. Will need the properties // for the remove_if of the out-edges. garbage.push_back((*out_i.base()).get_iter()); } // Now remove the edges from this out-edge list. typename Config::out_edge_iterator first, last; boost::tie(first, last) = out_edges(u, g); typedef typename Config::edge_parallel_category Cat; detail::remove_directed_edge_if_dispatch (first, last, g.out_edge_list(u), pred, Cat()); // Now delete the edge properties from the g.m_edges list for (typename Garbage::iterator i = garbage.begin(); i != garbage.end(); ++i) g.m_edges.erase(*i); } template inline void remove_in_edge_if(typename Config::vertex_descriptor v, Predicate pred, bidirectional_graph_helper_with_property& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; typedef typename Config::OutEdgeList::value_type::property_type PropT; graph_type& g = static_cast(g_); typedef typename Config::EdgeIter EdgeIter; typedef std::vector Garbage; Garbage garbage; // First remove the edges from the sources' out-edge lists and // from the graph's edge set list. typename Config::in_edge_iterator in_i, in_end; for (boost::tie(in_i, in_end) = in_edges(v, g); in_i != in_end; ++in_i) if (pred(*in_i)) { typename Config::vertex_descriptor u = source(*in_i, g); detail::remove_directed_edge_dispatch (*in_i, g.out_edge_list(u), *(PropT*)(*in_i).get_property()); // Put in garbage to delete later. Will need the properties // for the remove_if of the out-edges. garbage.push_back((*in_i.base()).get_iter()); } // Now remove the edges from this in-edge list. typename Config::in_edge_iterator first, last; boost::tie(first, last) = in_edges(v, g); typedef typename Config::edge_parallel_category Cat; detail::remove_directed_edge_if_dispatch (first, last, in_edge_list(g, v), pred, Cat()); // Now delete the edge properties from the g.m_edges list for (typename Garbage::iterator i = garbage.begin(); i != garbage.end(); ++i) g.m_edges.erase(*i); } // O(1) template inline typename Config::edges_size_type num_edges(const bidirectional_graph_helper_with_property& g_) { typedef typename Config::graph_type graph_type; const graph_type& g = static_cast(g_); return g.m_edges.size(); } // O(E/V * E/V) for allow_parallel_edge_tag // O(E/V * log(E/V)) for disallow_parallel_edge_tag template inline void clear_vertex(typename Config::vertex_descriptor u, bidirectional_graph_helper_with_property& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(g_); typename Config::OutEdgeList& el = g.out_edge_list(u); typename Config::OutEdgeList::iterator ei = el.begin(), ei_end = el.end(); for (; ei != ei_end; ++ei) { detail::erase_from_incidence_list (in_edge_list(g, (*ei).get_target()), u, Cat()); g.m_edges.erase((*ei).get_iter()); } typename Config::InEdgeList& in_el = in_edge_list(g, u); typename Config::InEdgeList::iterator in_ei = in_el.begin(), in_ei_end = in_el.end(); for (; in_ei != in_ei_end; ++in_ei) { detail::erase_from_incidence_list (g.out_edge_list((*in_ei).get_target()), u, Cat()); g.m_edges.erase((*in_ei).get_iter()); } g.out_edge_list(u).clear(); in_edge_list(g, u).clear(); } template inline void clear_out_edges(typename Config::vertex_descriptor u, bidirectional_graph_helper_with_property& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(g_); typename Config::OutEdgeList& el = g.out_edge_list(u); typename Config::OutEdgeList::iterator ei = el.begin(), ei_end = el.end(); for (; ei != ei_end; ++ei) { detail::erase_from_incidence_list (in_edge_list(g, (*ei).get_target()), u, Cat()); g.m_edges.erase((*ei).get_iter()); } g.out_edge_list(u).clear(); } template inline void clear_in_edges(typename Config::vertex_descriptor u, bidirectional_graph_helper_with_property& g_) { typedef typename Config::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Config::graph_type graph_type; typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(g_); typename Config::InEdgeList& in_el = in_edge_list(g, u); typename Config::InEdgeList::iterator in_ei = in_el.begin(), in_ei_end = in_el.end(); for (; in_ei != in_ei_end; ++in_ei) { detail::erase_from_incidence_list (g.out_edge_list((*in_ei).get_target()), u, Cat()); g.m_edges.erase((*in_ei).get_iter()); } in_edge_list(g, u).clear(); } // O(1) for allow_parallel_edge_tag // O(log(E/V)) for disallow_parallel_edge_tag template inline std::pair add_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, const typename Config::edge_property_type& p, bidirectional_graph_helper_with_property& g_) { typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); typedef typename Config::edge_descriptor edge_descriptor; typedef typename Config::StoredEdge StoredEdge; bool inserted; typename Config::EdgeContainer::value_type e(u, v, p); typename Config::EdgeContainer::iterator p_iter = graph_detail::push(g.m_edges, e).first; typename Config::OutEdgeList::iterator i; boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u), StoredEdge(v, p_iter, &g.m_edges)); if (inserted) { boost::graph_detail::push(in_edge_list(g, v), StoredEdge(u, p_iter, &g.m_edges)); return std::make_pair(edge_descriptor(u, v, &p_iter->m_property), true); } else { g.m_edges.erase(p_iter); return std::make_pair(edge_descriptor(u, v, &i->get_iter()->get_property()), false); } } template inline std::pair add_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, bidirectional_graph_helper_with_property& g_) { typename Config::edge_property_type p; return add_edge(u, v, p, g_); } // O(1) template inline typename Config::degree_size_type degree(typename Config::vertex_descriptor u, const bidirectional_graph_helper_with_property& g_) { typedef typename Config::graph_type graph_type; const graph_type& g = static_cast(g_); return in_degree(u, g) + out_degree(u, g); } //========================================================================= // Adjacency List Helper Class template struct adj_list_helper : public Base { typedef typename Config::graph_type AdjList; typedef typename Config::vertex_descriptor vertex_descriptor; typedef typename Config::edge_descriptor edge_descriptor; typedef typename Config::out_edge_iterator out_edge_iterator; typedef typename Config::in_edge_iterator in_edge_iterator; typedef typename Config::adjacency_iterator adjacency_iterator; typedef typename Config::inv_adjacency_iterator inv_adjacency_iterator; typedef typename Config::vertex_iterator vertex_iterator; typedef typename Config::edge_iterator edge_iterator; typedef typename Config::directed_category directed_category; typedef typename Config::edge_parallel_category edge_parallel_category; typedef typename Config::vertices_size_type vertices_size_type; typedef typename Config::edges_size_type edges_size_type; typedef typename Config::degree_size_type degree_size_type; typedef typename Config::StoredEdge StoredEdge; typedef typename Config::vertex_property_type vertex_property_type; typedef typename Config::edge_property_type edge_property_type; typedef typename Config::graph_property_type graph_property_type; typedef typename Config::global_edgelist_selector global_edgelist_selector; typedef typename lookup_one_property::type vertex_bundled; typedef typename lookup_one_property::type edge_bundled; typedef typename lookup_one_property::type graph_bundled; }; template inline std::pair adjacent_vertices(typename Config::vertex_descriptor u, const adj_list_helper& g_) { typedef typename Config::graph_type AdjList; const AdjList& cg = static_cast(g_); AdjList& g = const_cast(cg); typedef typename Config::adjacency_iterator adjacency_iterator; typename Config::out_edge_iterator first, last; boost::tie(first, last) = out_edges(u, g); return std::make_pair(adjacency_iterator(first, &g), adjacency_iterator(last, &g)); } template inline std::pair inv_adjacent_vertices(typename Config::vertex_descriptor u, const adj_list_helper& g_) { typedef typename Config::graph_type AdjList; const AdjList& cg = static_cast(g_); AdjList& g = const_cast(cg); typedef typename Config::inv_adjacency_iterator inv_adjacency_iterator; typename Config::in_edge_iterator first, last; boost::tie(first, last) = in_edges(u, g); return std::make_pair(inv_adjacency_iterator(first, &g), inv_adjacency_iterator(last, &g)); } template inline std::pair out_edges(typename Config::vertex_descriptor u, const adj_list_helper& g_) { typedef typename Config::graph_type AdjList; typedef typename Config::out_edge_iterator out_edge_iterator; const AdjList& cg = static_cast(g_); AdjList& g = const_cast(cg); return std::make_pair(out_edge_iterator(g.out_edge_list(u).begin(), u), out_edge_iterator(g.out_edge_list(u).end(), u)); } template inline std::pair vertices(const adj_list_helper& g_) { typedef typename Config::graph_type AdjList; const AdjList& cg = static_cast(g_); AdjList& g = const_cast(cg); return std::make_pair( g.vertex_set().begin(), g.vertex_set().end() ); } template inline typename Config::vertices_size_type num_vertices(const adj_list_helper& g_) { typedef typename Config::graph_type AdjList; const AdjList& g = static_cast(g_); return g.vertex_set().size(); } template inline typename Config::degree_size_type out_degree(typename Config::vertex_descriptor u, const adj_list_helper& g_) { typedef typename Config::graph_type AdjList; const AdjList& g = static_cast(g_); return g.out_edge_list(u).size(); } template inline std::pair edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, const adj_list_helper& g_) { typedef typename Config::graph_type Graph; typedef typename Config::StoredEdge StoredEdge; const Graph& cg = static_cast(g_); typedef typename Config::out_edge_iterator out_edge_iterator; const typename Config::OutEdgeList& el = cg.out_edge_list(u); typename Config::OutEdgeList::const_iterator it = graph_detail:: find(el, StoredEdge(v)); return std::make_pair( typename Config::edge_descriptor (u, v, (it == el.end() ? 0 : &(*it).get_property())), (it != el.end())); } template inline std::pair edge_range(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, const adj_list_helper& g_) { typedef typename Config::graph_type Graph; typedef typename Config::StoredEdge StoredEdge; const Graph& cg = static_cast(g_); Graph& g = const_cast(cg); typedef typename Config::out_edge_iterator out_edge_iterator; typename Config::OutEdgeList& el = g.out_edge_list(u); typename Config::OutEdgeList::iterator first, last; typename Config::EdgeContainer fake_edge_container; boost::tie(first, last) = graph_detail:: equal_range(el, StoredEdge(v, fake_edge_container.end(), &fake_edge_container)); return std::make_pair(out_edge_iterator(first, u), out_edge_iterator(last, u)); } template inline typename Config::degree_size_type in_degree(typename Config::vertex_descriptor u, const directed_edges_helper& g_) { typedef typename Config::graph_type Graph; const Graph& cg = static_cast(g_); Graph& g = const_cast(cg); return in_edge_list(g, u).size(); } namespace detail { template inline typename boost::property_map::type get_dispatch(adj_list_helper&, Property p, boost::edge_property_tag) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::type PA; return PA(p); } template inline typename boost::property_map::const_type get_dispatch(const adj_list_helper&, Property p, boost::edge_property_tag) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::const_type PA; return PA(p); } template inline typename boost::property_map::type get_dispatch(adj_list_helper& g, Property p, boost::vertex_property_tag) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::type PA; return PA(&static_cast(g), p); } template inline typename boost::property_map::const_type get_dispatch(const adj_list_helper& g, Property p, boost::vertex_property_tag) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::const_type PA; const Graph& cg = static_cast(g); return PA(&cg, p); } } // namespace detail // Implementation of the PropertyGraph interface template inline typename boost::property_map::type get(Property p, adj_list_helper& g) { typedef typename detail::property_kind_from_graph, Property>::type Kind; return detail::get_dispatch(g, p, Kind()); } template inline typename boost::property_map::const_type get(Property p, const adj_list_helper& g) { typedef typename detail::property_kind_from_graph, Property>::type Kind; return detail::get_dispatch(g, p, Kind()); } template inline typename boost::property_traits< typename boost::property_map::type >::reference get(Property p, adj_list_helper& g, const Key& key) { return get(get(p, g), key); } template inline typename boost::property_traits< typename boost::property_map::const_type >::reference get(Property p, const adj_list_helper& g, const Key& key) { return get(get(p, g), key); } template inline void put(Property p, adj_list_helper& g, const Key& key, const Value& value) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::type Map; Map pmap = get(p, static_cast(g)); put(pmap, key, value); } //========================================================================= // Generalize Adjacency List Implementation struct adj_list_tag { }; template class adj_list_impl : public adj_list_helper { typedef typename Config::OutEdgeList OutEdgeList; typedef typename Config::InEdgeList InEdgeList; typedef typename Config::StoredVertexList StoredVertexList; public: typedef typename Config::stored_vertex stored_vertex; typedef typename Config::EdgeContainer EdgeContainer; typedef typename Config::vertex_descriptor vertex_descriptor; typedef typename Config::edge_descriptor edge_descriptor; typedef typename Config::vertex_iterator vertex_iterator; typedef typename Config::edge_iterator edge_iterator; typedef typename Config::edge_parallel_category edge_parallel_category; typedef typename Config::vertices_size_type vertices_size_type; typedef typename Config::edges_size_type edges_size_type; typedef typename Config::degree_size_type degree_size_type; typedef typename Config::edge_property_type edge_property_type; typedef adj_list_tag graph_tag; static vertex_descriptor null_vertex() { return 0; } inline adj_list_impl() { } inline adj_list_impl(const adj_list_impl& x) { copy_impl(x); } inline adj_list_impl& operator=(const adj_list_impl& x) { this->clear(); copy_impl(x); return *this; } inline void clear() { for (typename StoredVertexList::iterator i = m_vertices.begin(); i != m_vertices.end(); ++i) delete (stored_vertex*)*i; m_vertices.clear(); m_edges.clear(); } inline adj_list_impl(vertices_size_type num_vertices) { for (vertices_size_type i = 0; i < num_vertices; ++i) add_vertex(static_cast(*this)); } template inline adj_list_impl(vertices_size_type num_vertices, EdgeIterator first, EdgeIterator last) { vertex_descriptor* v = new vertex_descriptor[num_vertices]; for (vertices_size_type i = 0; i < num_vertices; ++i) v[i] = add_vertex(static_cast(*this)); while (first != last) { add_edge(v[(*first).first], v[(*first).second], *this); ++first; } delete [] v; } template inline adj_list_impl(vertices_size_type num_vertices, EdgeIterator first, EdgeIterator last, EdgePropertyIterator ep_iter) { vertex_descriptor* v = new vertex_descriptor[num_vertices]; for (vertices_size_type i = 0; i < num_vertices; ++i) v[i] = add_vertex(static_cast(*this)); while (first != last) { add_edge(v[(*first).first], v[(*first).second], *ep_iter, *this); ++first; ++ep_iter; } delete [] v; } ~adj_list_impl() { for (typename StoredVertexList::iterator i = m_vertices.begin(); i != m_vertices.end(); ++i) delete (stored_vertex*)*i; } // protected: inline OutEdgeList& out_edge_list(vertex_descriptor v) { stored_vertex* sv = (stored_vertex*)v; return sv->m_out_edges; } inline const OutEdgeList& out_edge_list(vertex_descriptor v) const { stored_vertex* sv = (stored_vertex*)v; return sv->m_out_edges; } inline StoredVertexList& vertex_set() { return m_vertices; } inline const StoredVertexList& vertex_set() const { return m_vertices; } inline void copy_impl(const adj_list_impl& x_) { const Derived& x = static_cast(x_); // Would be better to have a constant time way to get from // vertices in x to the corresponding vertices in *this. std::map vertex_map; // Copy the stored vertex objects by adding each vertex // and copying its property object. vertex_iterator vi, vi_end; for (boost::tie(vi, vi_end) = vertices(x); vi != vi_end; ++vi) { stored_vertex* v = (stored_vertex*)add_vertex(*this); v->m_property = ((stored_vertex*)*vi)->m_property; vertex_map[(stored_vertex*)*vi] = v; } // Copy the edges by adding each edge and copying its // property object. edge_iterator ei, ei_end; for (boost::tie(ei, ei_end) = edges(x); ei != ei_end; ++ei) { edge_descriptor e; bool inserted; vertex_descriptor s = source(*ei,x), t = target(*ei,x); boost::tie(e, inserted) = add_edge(vertex_map[(stored_vertex*)s], vertex_map[(stored_vertex*)t], *this); *((edge_property_type*)e.m_eproperty) = *((edge_property_type*)(*ei).m_eproperty); } } typename Config::EdgeContainer m_edges; StoredVertexList m_vertices; }; // O(1) template inline typename Config::vertex_descriptor add_vertex(adj_list_impl& g_) { Derived& g = static_cast(g_); typedef typename Config::stored_vertex stored_vertex; stored_vertex* v = new stored_vertex; typename Config::StoredVertexList::iterator pos; bool inserted; boost::tie(pos,inserted) = boost::graph_detail::push(g.m_vertices, v); v->m_position = pos; g.added_vertex(v); return v; } // O(1) template inline typename Config::vertex_descriptor add_vertex(const typename Config::vertex_property_type& p, adj_list_impl& g_) { typedef typename Config::vertex_descriptor vertex_descriptor; Derived& g = static_cast(g_); if (optional v = g.vertex_by_property(get_property_value(p, vertex_bundle))) return *v; typedef typename Config::stored_vertex stored_vertex; stored_vertex* v = new stored_vertex(p); typename Config::StoredVertexList::iterator pos; bool inserted; boost::tie(pos,inserted) = boost::graph_detail::push(g.m_vertices, v); v->m_position = pos; g.added_vertex(v); return v; } // O(1) template inline void remove_vertex(typename Config::vertex_descriptor u, adj_list_impl& g_) { typedef typename Config::stored_vertex stored_vertex; Derived& g = static_cast(g_); g.removing_vertex(u); stored_vertex* su = (stored_vertex*)u; g.m_vertices.erase(su->m_position); delete su; } // O(V) template inline typename Config::vertex_descriptor vertex(typename Config::vertices_size_type n, const adj_list_impl& g_) { const Derived& g = static_cast(g_); typename Config::vertex_iterator i = vertices(g).first; while (n--) ++i; // std::advance(i, n); (not VC++ portable) return *i; } //========================================================================= // Vector-Backbone Adjacency List Implementation namespace detail { template inline void remove_vertex_dispatch(Graph& g, vertex_descriptor u, boost::directed_tag) { typedef typename Graph::edge_parallel_category edge_parallel_category; g.m_vertices.erase(g.m_vertices.begin() + u); vertex_descriptor V = num_vertices(g); if (u != V) { for (vertex_descriptor v = 0; v < V; ++v) reindex_edge_list(g.out_edge_list(v), u, edge_parallel_category()); } } template inline void remove_vertex_dispatch(Graph& g, vertex_descriptor u, boost::undirected_tag) { typedef typename Graph::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Graph::edge_parallel_category edge_parallel_category; g.m_vertices.erase(g.m_vertices.begin() + u); vertex_descriptor V = num_vertices(g); for (vertex_descriptor v = 0; v < V; ++v) reindex_edge_list(g.out_edge_list(v), u, edge_parallel_category()); typedef typename Graph::EdgeContainer Container; typedef typename Container::iterator Iter; Iter ei = g.m_edges.begin(), ei_end = g.m_edges.end(); for (; ei != ei_end; ++ei) { if (ei->m_source > u) --ei->m_source; if (ei->m_target > u) --ei->m_target; } } template inline void remove_vertex_dispatch(Graph& g, vertex_descriptor u, boost::bidirectional_tag) { typedef typename Graph::global_edgelist_selector EdgeListS; BOOST_STATIC_ASSERT((!is_same::value)); typedef typename Graph::edge_parallel_category edge_parallel_category; g.m_vertices.erase(g.m_vertices.begin() + u); vertex_descriptor V = num_vertices(g); vertex_descriptor v; if (u != V) { for (v = 0; v < V; ++v) reindex_edge_list(g.out_edge_list(v), u, edge_parallel_category()); for (v = 0; v < V; ++v) reindex_edge_list(in_edge_list(g, v), u, edge_parallel_category()); typedef typename Graph::EdgeContainer Container; typedef typename Container::iterator Iter; Iter ei = g.m_edges.begin(), ei_end = g.m_edges.end(); for (; ei != ei_end; ++ei) { if (ei->m_source > u) --ei->m_source; if (ei->m_target > u) --ei->m_target; } } } template inline void reindex_edge_list(EdgeList& el, vertex_descriptor u, boost::allow_parallel_edge_tag) { typename EdgeList::iterator ei = el.begin(), e_end = el.end(); for (; ei != e_end; ++ei) if ((*ei).get_target() > u) --(*ei).get_target(); } template inline void reindex_edge_list(EdgeList& el, vertex_descriptor u, boost::disallow_parallel_edge_tag) { typename EdgeList::iterator ei = el.begin(), e_end = el.end(); while (ei != e_end) { typename EdgeList::value_type ce = *ei; ++ei; if (ce.get_target() > u) { el.erase(ce); --ce.get_target(); el.insert(ce); } } } } // namespace detail struct vec_adj_list_tag { }; template class vec_adj_list_impl : public adj_list_helper { typedef typename Config::OutEdgeList OutEdgeList; typedef typename Config::InEdgeList InEdgeList; typedef typename Config::StoredVertexList StoredVertexList; public: typedef typename Config::vertex_descriptor vertex_descriptor; typedef typename Config::edge_descriptor edge_descriptor; typedef typename Config::out_edge_iterator out_edge_iterator; typedef typename Config::edge_iterator edge_iterator; typedef typename Config::directed_category directed_category; typedef typename Config::vertices_size_type vertices_size_type; typedef typename Config::edges_size_type edges_size_type; typedef typename Config::degree_size_type degree_size_type; typedef typename Config::StoredEdge StoredEdge; typedef typename Config::stored_vertex stored_vertex; typedef typename Config::EdgeContainer EdgeContainer; typedef typename Config::edge_property_type edge_property_type; typedef vec_adj_list_tag graph_tag; static vertex_descriptor null_vertex() { return (std::numeric_limits::max)(); } inline vec_adj_list_impl() { } inline vec_adj_list_impl(const vec_adj_list_impl& x) { copy_impl(x); } inline vec_adj_list_impl& operator=(const vec_adj_list_impl& x) { this->clear(); copy_impl(x); return *this; } inline void clear() { m_vertices.clear(); m_edges.clear(); } inline vec_adj_list_impl(vertices_size_type _num_vertices) : m_vertices(_num_vertices) { } template inline vec_adj_list_impl(vertices_size_type num_vertices, EdgeIterator first, EdgeIterator last) : m_vertices(num_vertices) { while (first != last) { add_edge((*first).first, (*first).second, static_cast(*this)); ++first; } } template inline vec_adj_list_impl(vertices_size_type num_vertices, EdgeIterator first, EdgeIterator last, EdgePropertyIterator ep_iter) : m_vertices(num_vertices) { while (first != last) { add_edge((*first).first, (*first).second, *ep_iter, static_cast(*this)); ++first; ++ep_iter; } } // protected: inline boost::integer_range vertex_set() const { return boost::integer_range(0, m_vertices.size()); } inline OutEdgeList& out_edge_list(vertex_descriptor v) { return m_vertices[v].m_out_edges; } inline const OutEdgeList& out_edge_list(vertex_descriptor v) const { return m_vertices[v].m_out_edges; } inline void copy_impl(const vec_adj_list_impl& x_) { const Graph& x = static_cast(x_); // Copy the stored vertex objects by adding each vertex // and copying its property object. for (vertices_size_type i = 0; i < num_vertices(x); ++i) { vertex_descriptor v = add_vertex(*this); m_vertices[v].m_property = x.m_vertices[i].m_property; } // Copy the edges by adding each edge and copying its // property object. edge_iterator ei, ei_end; for (boost::tie(ei, ei_end) = edges(x); ei != ei_end; ++ei) { edge_descriptor e; bool inserted; boost::tie(e, inserted) = add_edge(source(*ei,x), target(*ei,x) , *this); *((edge_property_type*)e.m_eproperty) = *((edge_property_type*)(*ei).m_eproperty); } } typename Config::EdgeContainer m_edges; StoredVertexList m_vertices; }; // Had to make these non-members to avoid accidental instantiation // on SGI MIPSpro C++ template inline typename C::InEdgeList& in_edge_list(vec_adj_list_impl& g, typename C::vertex_descriptor v) { return g.m_vertices[v].m_in_edges; } template inline const typename C::InEdgeList& in_edge_list(const vec_adj_list_impl& g, typename C::vertex_descriptor v) { return g.m_vertices[v].m_in_edges; } // O(1) template inline typename Config::vertex_descriptor add_vertex(vec_adj_list_impl& g_) { Graph& g = static_cast(g_); g.m_vertices.resize(g.m_vertices.size() + 1); g.added_vertex(g.m_vertices.size() - 1); return g.m_vertices.size() - 1; } template inline typename Config::vertex_descriptor add_vertex(const typename Config::vertex_property_type& p, vec_adj_list_impl& g_) { typedef typename Config::vertex_descriptor vertex_descriptor; Graph& g = static_cast(g_); if (optional v = g.vertex_by_property(get_property_value(p, vertex_bundle))) return *v; typedef typename Config::stored_vertex stored_vertex; g.m_vertices.push_back(stored_vertex(p)); g.added_vertex(g.m_vertices.size() - 1); return g.m_vertices.size() - 1; } // Here we override the directed_graph_helper add_edge() function // so that the number of vertices is automatically changed if // either u or v is greater than the number of vertices. template inline std::pair add_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, const typename Config::edge_property_type& p, vec_adj_list_impl& g_) { BOOST_USING_STD_MAX(); typename Config::vertex_descriptor x = max BOOST_PREVENT_MACRO_SUBSTITUTION(u, v); if (x >= num_vertices(g_)) g_.m_vertices.resize(x + 1); adj_list_helper& g = g_; return add_edge(u, v, p, g); } template inline std::pair add_edge(typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, vec_adj_list_impl& g_) { typename Config::edge_property_type p; return add_edge(u, v, p, g_); } // O(V + E) template inline void remove_vertex(typename Config::vertex_descriptor v, vec_adj_list_impl& g_) { typedef typename Config::directed_category Cat; Graph& g = static_cast(g_); g.removing_vertex(v); detail::remove_vertex_dispatch(g, v, Cat()); } // O(1) template inline typename Config::vertex_descriptor vertex(typename Config::vertices_size_type n, const vec_adj_list_impl&) { return n; } namespace detail { //========================================================================= // Adjacency List Generator template struct adj_list_gen { typedef typename detail::is_random_access::type is_rand_access; typedef typename has_property::type has_edge_property; typedef typename DirectedS::is_directed_t DirectedT; typedef typename DirectedS::is_bidir_t BidirectionalT; struct config { typedef OutEdgeListS edgelist_selector; typedef EdgeListS global_edgelist_selector; typedef Graph graph_type; typedef EdgeProperty edge_property_type; typedef VertexProperty vertex_property_type; typedef GraphProperty graph_property_type; typedef std::size_t vertices_size_type; typedef adjacency_list_traits Traits; typedef typename Traits::directed_category directed_category; typedef typename Traits::edge_parallel_category edge_parallel_category; typedef typename Traits::vertex_descriptor vertex_descriptor; typedef typename Traits::edge_descriptor edge_descriptor; typedef void* vertex_ptr; // need to reorganize this to avoid instantiating stuff // that doesn't get used -JGS // VertexList and vertex_iterator typedef typename container_gen::type SeqVertexList; typedef boost::integer_range RandVertexList; typedef typename mpl::if_::type VertexList; typedef typename VertexList::iterator vertex_iterator; // EdgeContainer and StoredEdge typedef typename container_gen >::type EdgeContainer; typedef typename mpl::and_::type >::type on_edge_storage; typedef typename mpl::if_::type edges_size_type; typedef typename EdgeContainer::iterator EdgeIter; typedef typename detail::is_random_access::type is_edge_ra; typedef typename mpl::if_, typename mpl::if_, stored_edge_iter >::type >::type StoredEdge; // Adjacency Types typedef typename container_gen::type OutEdgeList; typedef typename OutEdgeList::size_type degree_size_type; typedef typename OutEdgeList::iterator OutEdgeIter; typedef boost::detail::iterator_traits OutEdgeIterTraits; typedef typename OutEdgeIterTraits::iterator_category OutEdgeIterCat; typedef typename OutEdgeIterTraits::difference_type OutEdgeIterDiff; typedef out_edge_iter< OutEdgeIter, vertex_descriptor, edge_descriptor, OutEdgeIterDiff > out_edge_iterator; typedef typename adjacency_iterator_generator::type adjacency_iterator; typedef OutEdgeList InEdgeList; typedef OutEdgeIter InEdgeIter; typedef OutEdgeIterCat InEdgeIterCat; typedef OutEdgeIterDiff InEdgeIterDiff; typedef in_edge_iter< InEdgeIter, vertex_descriptor, edge_descriptor, InEdgeIterDiff > in_edge_iterator; typedef typename inv_adjacency_iterator_generator::type inv_adjacency_iterator; // Edge Iterator typedef boost::detail::iterator_traits EdgeIterTraits; typedef typename EdgeIterTraits::iterator_category EdgeIterCat; typedef typename EdgeIterTraits::difference_type EdgeIterDiff; typedef undirected_edge_iter< EdgeIter , edge_descriptor , EdgeIterDiff > UndirectedEdgeIter; // also used for bidirectional typedef adj_list_edge_iterator DirectedEdgeIter; typedef typename mpl::if_::type edge_iterator; // stored_vertex and StoredVertexList typedef typename container_gen::type SeqStoredVertexList; struct seq_stored_vertex { seq_stored_vertex() { } seq_stored_vertex(const VertexProperty& p) : m_property(p) { } OutEdgeList m_out_edges; VertexProperty m_property; typename SeqStoredVertexList::iterator m_position; }; struct bidir_seq_stored_vertex { bidir_seq_stored_vertex() { } bidir_seq_stored_vertex(const VertexProperty& p) : m_property(p) { } OutEdgeList m_out_edges; InEdgeList m_in_edges; VertexProperty m_property; typename SeqStoredVertexList::iterator m_position; }; struct rand_stored_vertex { rand_stored_vertex() { } rand_stored_vertex(const VertexProperty& p) : m_property(p) { } OutEdgeList m_out_edges; VertexProperty m_property; }; struct bidir_rand_stored_vertex { bidir_rand_stored_vertex() { } bidir_rand_stored_vertex(const VertexProperty& p) : m_property(p) { } OutEdgeList m_out_edges; InEdgeList m_in_edges; VertexProperty m_property; }; typedef typename mpl::if_::type, typename mpl::if_::type >::type StoredVertex; struct stored_vertex : public StoredVertex { stored_vertex() { } stored_vertex(const VertexProperty& p) : StoredVertex(p) { } }; typedef typename container_gen::type RandStoredVertexList; typedef typename mpl::if_< is_rand_access, RandStoredVertexList, SeqStoredVertexList>::type StoredVertexList; }; // end of config typedef typename mpl::if_, typename mpl::if_, undirected_graph_helper >::type >::type DirectedHelper; typedef typename mpl::if_, adj_list_impl >::type type; }; } // namespace detail //========================================================================= // Vertex Property Maps template struct adj_list_vertex_property_map : public boost::put_get_helper< Reference, adj_list_vertex_property_map > { typedef typename Graph::stored_vertex StoredVertex; typedef ValueType value_type; typedef Reference reference; typedef typename Graph::vertex_descriptor key_type; typedef boost::lvalue_property_map_tag category; inline adj_list_vertex_property_map(const Graph* = 0, Tag tag = Tag()): m_tag(tag) { } inline Reference operator[](key_type v) const { StoredVertex* sv = (StoredVertex*)v; return get_property_value(sv->m_property, m_tag); } inline Reference operator()(key_type v) const { return this->operator[](v); } Tag m_tag; }; template struct adj_list_vertex_all_properties_map : public boost::put_get_helper > { typedef typename Graph::stored_vertex StoredVertex; typedef Property value_type; typedef PropRef reference; typedef typename Graph::vertex_descriptor key_type; typedef boost::lvalue_property_map_tag category; inline adj_list_vertex_all_properties_map(const Graph* = 0, vertex_all_t = vertex_all_t()) { } inline PropRef operator[](key_type v) const { StoredVertex* sv = (StoredVertex*)v; return sv->m_property; } inline PropRef operator()(key_type v) const { return this->operator[](v); } }; template struct vec_adj_list_vertex_property_map : public boost::put_get_helper< Reference, vec_adj_list_vertex_property_map > { typedef ValueType value_type; typedef Reference reference; typedef typename boost::graph_traits::vertex_descriptor key_type; typedef boost::lvalue_property_map_tag category; vec_adj_list_vertex_property_map(GraphPtr g = 0, Tag tag = Tag()) : m_g(g), m_tag(tag) { } inline Reference operator[](key_type v) const { return get_property_value(m_g->m_vertices[v].m_property, m_tag); } inline Reference operator()(key_type v) const { return this->operator[](v); } GraphPtr m_g; Tag m_tag; }; template struct vec_adj_list_vertex_all_properties_map : public boost::put_get_helper > { typedef Property value_type; typedef PropertyRef reference; typedef typename boost::graph_traits::vertex_descriptor key_type; typedef boost::lvalue_property_map_tag category; vec_adj_list_vertex_all_properties_map(GraphPtr g = 0, vertex_all_t = vertex_all_t()) : m_g(g) { } inline PropertyRef operator[](key_type v) const { return m_g->m_vertices[v].m_property; } inline PropertyRef operator()(key_type v) const { return this->operator[](v); } GraphPtr m_g; }; struct adj_list_any_vertex_pa { template struct bind_ { typedef typename property_value::type value_type; typedef value_type& reference; typedef const value_type& const_reference; typedef adj_list_vertex_property_map type; typedef adj_list_vertex_property_map const_type; }; }; struct adj_list_all_vertex_pa { template struct bind_ { typedef typename Graph::vertex_descriptor Vertex; typedef adj_list_vertex_all_properties_map type; typedef adj_list_vertex_all_properties_map const_type; }; }; template struct vec_adj_list_vertex_id_map : public boost::put_get_helper< Vertex, vec_adj_list_vertex_id_map > { typedef Vertex value_type; typedef Vertex key_type; typedef Vertex reference; typedef boost::readable_property_map_tag category; inline vec_adj_list_vertex_id_map() { } template inline vec_adj_list_vertex_id_map(const Graph&, vertex_index_t) { } inline value_type operator[](key_type v) const { return v; } inline value_type operator()(key_type v) const { return v; } }; struct vec_adj_list_any_vertex_pa { template struct bind_ { typedef typename property_value::type value_type; typedef value_type& reference; typedef const value_type& const_reference; typedef vec_adj_list_vertex_property_map type; typedef vec_adj_list_vertex_property_map const_type; }; }; struct vec_adj_list_id_vertex_pa { template struct bind_ { typedef typename Graph::vertex_descriptor Vertex; typedef vec_adj_list_vertex_id_map type; typedef vec_adj_list_vertex_id_map const_type; }; }; struct vec_adj_list_all_vertex_pa { template struct bind_ { typedef typename Graph::vertex_descriptor Vertex; typedef vec_adj_list_vertex_all_properties_map type; typedef vec_adj_list_vertex_all_properties_map const_type; }; }; namespace detail { template struct adj_list_choose_vertex_pa : boost::mpl::if_< boost::is_same, adj_list_all_vertex_pa, adj_list_any_vertex_pa>::type ::template bind_ {}; template struct vec_adj_list_choose_vertex_pa_helper { typedef vec_adj_list_any_vertex_pa type; }; template <> struct vec_adj_list_choose_vertex_pa_helper { typedef vec_adj_list_id_vertex_pa type; }; template <> struct vec_adj_list_choose_vertex_pa_helper { typedef vec_adj_list_all_vertex_pa type; }; template struct vec_adj_list_choose_vertex_pa : vec_adj_list_choose_vertex_pa_helper::type::template bind_ {}; } // namespace detail //========================================================================= // Edge Property Map template struct adj_list_edge_property_map : public put_get_helper< Ref, adj_list_edge_property_map > { Tag tag; explicit adj_list_edge_property_map(Tag tag = Tag()): tag(tag) {} typedef Value value_type; typedef Ref reference; typedef detail::edge_desc_impl key_type; typedef boost::lvalue_property_map_tag category; inline Ref operator[](key_type e) const { Property& p = *(Property*)e.get_property(); return get_property_value(p, tag); } inline Ref operator()(key_type e) const { return this->operator[](e); } }; template struct adj_list_edge_all_properties_map : public put_get_helper > { explicit adj_list_edge_all_properties_map(edge_all_t = edge_all_t()) {} typedef Property value_type; typedef PropRef reference; typedef detail::edge_desc_impl key_type; typedef boost::lvalue_property_map_tag category; inline PropRef operator[](key_type e) const { return *(PropPtr)e.get_property(); } inline PropRef operator()(key_type e) const { return this->operator[](e); } }; // Edge Property Maps namespace detail { struct adj_list_any_edge_pmap { template struct bind_ { typedef typename property_value::type value_type; typedef value_type& reference; typedef const value_type& const_reference; typedef adj_list_edge_property_map type; typedef adj_list_edge_property_map const_type; }; }; struct adj_list_all_edge_pmap { template struct bind_ { typedef adj_list_edge_all_properties_map type; typedef adj_list_edge_all_properties_map const_type; }; }; template struct adj_list_choose_edge_pmap_helper { typedef adj_list_any_edge_pmap type; }; template <> struct adj_list_choose_edge_pmap_helper { typedef adj_list_all_edge_pmap type; }; template struct adj_list_choose_edge_pmap : adj_list_choose_edge_pmap_helper::type::template bind_ {}; struct adj_list_edge_property_selector { template struct bind_: adj_list_choose_edge_pmap {}; }; } // namespace detail template <> struct edge_property_selector { typedef detail::adj_list_edge_property_selector type; }; template <> struct edge_property_selector { typedef detail::adj_list_edge_property_selector type; }; // Vertex Property Maps struct adj_list_vertex_property_selector { template struct bind_ : detail::adj_list_choose_vertex_pa {}; }; template <> struct vertex_property_selector { typedef adj_list_vertex_property_selector type; }; struct vec_adj_list_vertex_property_selector { template struct bind_: detail::vec_adj_list_choose_vertex_pa {}; }; template <> struct vertex_property_selector { typedef vec_adj_list_vertex_property_selector type; }; } // namespace boost #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) namespace boost { template struct hash< boost::detail::stored_edge > { std::size_t operator()(const boost::detail::stored_edge& e) const { return hash()(e.m_target); } }; template struct hash< boost::detail::stored_edge_property > { std::size_t operator()(const boost::detail::stored_edge_property& e) const { return hash()(e.m_target); } }; template struct hash< boost::detail::stored_edge_iter > { std::size_t operator()(const boost::detail::stored_edge_iter& e) const { return hash()(e.m_target); } }; } #endif #endif // BOOST_GRAPH_DETAIL_DETAIL_ADJACENCY_LIST_CCT /* Implementation Notes: Many of the public interface functions in this file would have been more conveniently implemented as inline friend functions. However there are a few compiler bugs that make that approach non-portable. 1. g++ inline friend in namespace bug 2. g++ using clause doesn't work with inline friends 3. VC++ doesn't have Koenig lookup For these reasons, the functions were all written as non-inline free functions, and static cast was used to convert from the helper class to the adjacency_list derived class. Looking back, it might have been better to write out all functions in terms of the adjacency_list, and then use a tag to dispatch to the various helpers instead of using inheritance. */ array_binary_tree.hpp000444000765000024 1401412161110624 25056 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/detail// //======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= // #ifndef BOOST_ARRAY_BINARY_TREE_HPP #define BOOST_ARRAY_BINARY_TREE_HPP #include #include #include namespace boost { /* * Note: array_binary_tree is a completey balanced binary tree. */ #if !defined BOOST_NO_STD_ITERATOR_TRAITS template #else template #endif class array_binary_tree_node { public: typedef array_binary_tree_node ArrayBinaryTreeNode; typedef RandomAccessIterator rep_iterator; #if !defined BOOST_NO_STD_ITERATOR_TRAITS typedef typename std::iterator_traits::difference_type difference_type; typedef typename std::iterator_traits::value_type value_type; #else typedef int difference_type; typedef ValueType value_type; #endif typedef difference_type size_type; struct children_type { struct iterator : boost::iterator { // replace with iterator_adaptor implementation -JGS inline iterator() : i(0), n(0) { } inline iterator(const iterator& x) : r(x.r), i(x.i), n(x.n), id(x.id) { } inline iterator& operator=(const iterator& x) { r = x.r; i = x.i; n = x.n; /*egcs generate a warning*/ id = x.id; return *this; } inline iterator(rep_iterator rr, size_type ii, size_type nn, const ID& _id) : r(rr), i(ii), n(nn), id(_id) { } inline array_binary_tree_node operator*() { return ArrayBinaryTreeNode(r, i, n, id); } inline iterator& operator++() { ++i; return *this; } inline iterator operator++(int) { iterator t = *this; ++(*this); return t; } inline bool operator==(const iterator& x) const { return i == x.i; } inline bool operator!=(const iterator& x) const { return !(*this == x); } rep_iterator r; size_type i; size_type n; ID id; }; inline children_type() : i(0), n(0) { } inline children_type(const children_type& x) : r(x.r), i(x.i), n(x.n), id(x.id) { } inline children_type& operator=(const children_type& x) { r = x.r; i = x.i; n = x.n; /*egcs generate a warning*/ id = x.id; return *this; } inline children_type(rep_iterator rr, size_type ii, size_type nn, const ID& _id) : r(rr), i(ii), n(nn), id(_id) { } inline iterator begin() { return iterator(r, 2 * i + 1, n, id); } inline iterator end() { return iterator(r, 2 * i + 1 + size(), n, id); } inline size_type size() const { size_type c = 2 * i + 1; size_type s; if (c + 1 < n) s = 2; else if (c < n) s = 1; else s = 0; return s; } rep_iterator r; size_type i; size_type n; ID id; }; inline array_binary_tree_node() : i(0), n(0) { } inline array_binary_tree_node(const array_binary_tree_node& x) : r(x.r), i(x.i), n(x.n), id(x.id) { } inline ArrayBinaryTreeNode& operator=(const ArrayBinaryTreeNode& x) { r = x.r; i = x.i; n = x.n; /*egcs generate a warning*/ id = x.id; return *this; } inline array_binary_tree_node(rep_iterator start, rep_iterator end, rep_iterator pos, const ID& _id) : r(start), i(pos - start), n(end - start), id(_id) { } inline array_binary_tree_node(rep_iterator rr, size_type ii, size_type nn, const ID& _id) : r(rr), i(ii), n(nn), id(_id) { } inline value_type& value() { return *(r + i); } inline const value_type& value() const { return *(r + i); } inline ArrayBinaryTreeNode parent() const { return ArrayBinaryTreeNode(r, (i - 1) / 2, n, id); } inline bool has_parent() const { return i != 0; } inline children_type children() { return children_type(r, i, n, id); } /* inline void swap(array_binary_tree_node x) { value_type tmp = x.value(); x.value() = value(); value() = tmp; i = x.i; } */ template inline void swap(ArrayBinaryTreeNode x, ExternalData& edata ) { using boost::get; value_type tmp = x.value(); /*swap external data*/ edata[ get(id, tmp) ] = i; edata[ get(id, value()) ] = x.i; x.value() = value(); value() = tmp; i = x.i; } inline const children_type children() const { return children_type(r, i, n); } inline size_type index() const { return i; } rep_iterator r; size_type i; size_type n; ID id; }; template > struct compare_array_node { typedef typename RandomAccessContainer::value_type value_type; compare_array_node(const Compare& x) : comp(x) {} compare_array_node(const compare_array_node& x) : comp(x.comp) {} template< class node_type > inline bool operator()(const node_type& x, const node_type& y) { return comp(x.value(), y.value()); } template< class node_type > inline bool operator()(const node_type& x, const node_type& y) const { return comp(x.value(), y.value()); } Compare comp; }; } // namespace boost #endif /* BOOST_ARRAY_BINARY_TREE_HPP */ d_ary_heap.hpp000444000765000024 2715112161110651 23456 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/detail// //======================================================================= // Copyright 2009 Trustees of Indiana University // Authors: Jeremiah J. Willcock, Andrew Lumsdaine // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= // #ifndef BOOST_D_ARY_HEAP_HPP #define BOOST_D_ARY_HEAP_HPP #include #include #include #include #include #include #include #include // WARNING: it is not safe to copy a d_ary_heap_indirect and then modify one of // the copies. The class is required to be copyable so it can be passed around // (without move support from C++11), but it deep-copies the heap contents yet // shallow-copies the index_in_heap_map. namespace boost { // Swap two elements in a property map without assuming they model // LvaluePropertyMap -- currently not used template inline void property_map_swap( PropMap prop_map, const typename boost::property_traits::key_type& ka, const typename boost::property_traits::key_type& kb) { typename boost::property_traits::value_type va = get(prop_map, ka); put(prop_map, ka, get(prop_map, kb)); put(prop_map, kb, va); } namespace detail { template class fixed_max_size_vector { boost::shared_array m_data; std::size_t m_size; public: typedef std::size_t size_type; fixed_max_size_vector(std::size_t max_size) : m_data(new Value[max_size]), m_size(0) {} std::size_t size() const {return m_size;} bool empty() const {return m_size == 0;} Value& operator[](std::size_t i) {return m_data[i];} const Value& operator[](std::size_t i) const {return m_data[i];} void push_back(Value v) {m_data[m_size++] = v;} void pop_back() {--m_size;} Value& back() {return m_data[m_size - 1];} const Value& back() const {return m_data[m_size - 1];} }; } // D-ary heap using an indirect compare operator (use identity_property_map // as DistanceMap to get a direct compare operator). This heap appears to be // commonly used for Dijkstra's algorithm for its good practical performance // on some platforms; asymptotically, it has an O(lg N) decrease-key // operation while that can be done in constant time on a relaxed heap. The // implementation is mostly based on the binary heap page on Wikipedia and // online sources that state that the operations are the same for d-ary // heaps. This code is not based on the old Boost d-ary heap code. // // - d_ary_heap_indirect is a model of UpdatableQueue as is needed for // dijkstra_shortest_paths. // // - Value must model Assignable. // - Arity must be at least 2 (optimal value appears to be 4, both in my and // third-party experiments). // - IndexInHeapMap must be a ReadWritePropertyMap from Value to // Container::size_type (to store the index of each stored value within the // heap for decrease-key aka update). // - DistanceMap must be a ReadablePropertyMap from Value to something // (typedef'ed as distance_type). // - Compare must be a BinaryPredicate used as a less-than operator on // distance_type. // - Container must be a random-access, contiguous container (in practice, // the operations used probably require that it is std::vector). // template , typename Container = std::vector > class d_ary_heap_indirect { BOOST_STATIC_ASSERT (Arity >= 2); public: typedef typename Container::size_type size_type; typedef Value value_type; typedef typename boost::property_traits::value_type key_type; typedef DistanceMap key_map; d_ary_heap_indirect(DistanceMap distance, IndexInHeapPropertyMap index_in_heap, const Compare& compare = Compare(), const Container& data = Container()) : compare(compare), data(data), distance(distance), index_in_heap(index_in_heap) {} /* Implicit copy constructor */ /* Implicit assignment operator */ size_type size() const { return data.size(); } bool empty() const { return data.empty(); } void push(const Value& v) { size_type index = data.size(); data.push_back(v); put(index_in_heap, v, index); preserve_heap_property_up(index); verify_heap(); } Value& top() { BOOST_ASSERT (!this->empty()); return data[0]; } const Value& top() const { BOOST_ASSERT (!this->empty()); return data[0]; } void pop() { BOOST_ASSERT (!this->empty()); put(index_in_heap, data[0], (size_type)(-1)); if (data.size() != 1) { data[0] = data.back(); put(index_in_heap, data[0], (size_type)(0)); data.pop_back(); preserve_heap_property_down(); verify_heap(); } else { data.pop_back(); } } // This function assumes the key has been updated (using an external write // to the distance map or such) // See http://coding.derkeiler.com/Archive/General/comp.theory/2007-05/msg00043.html void update(const Value& v) { /* decrease-key */ size_type index = get(index_in_heap, v); preserve_heap_property_up(index); verify_heap(); } bool contains(const Value& v) const { size_type index = get(index_in_heap, v); return (index != (size_type)(-1)); } void push_or_update(const Value& v) { /* insert if not present, else update */ size_type index = get(index_in_heap, v); if (index == (size_type)(-1)) { index = data.size(); data.push_back(v); put(index_in_heap, v, index); } preserve_heap_property_up(index); verify_heap(); } DistanceMap keys() const { return distance; } private: Compare compare; Container data; DistanceMap distance; IndexInHeapPropertyMap index_in_heap; // The distances being compared using compare and that are stored in the // distance map typedef typename boost::property_traits::value_type distance_type; // Get the parent of a given node in the heap static size_type parent(size_type index) { return (index - 1) / Arity; } // Get the child_idx'th child of a given node; 0 <= child_idx < Arity static size_type child(size_type index, std::size_t child_idx) { return index * Arity + child_idx + 1; } // Swap two elements in the heap by index, updating index_in_heap void swap_heap_elements(size_type index_a, size_type index_b) { using std::swap; Value value_a = data[index_a]; Value value_b = data[index_b]; data[index_a] = value_b; data[index_b] = value_a; put(index_in_heap, value_a, index_b); put(index_in_heap, value_b, index_a); } // Emulate the indirect_cmp that is now folded into this heap class bool compare_indirect(const Value& a, const Value& b) const { return compare(get(distance, a), get(distance, b)); } // Verify that the array forms a heap; commented out by default void verify_heap() const { // This is a very expensive test so it should be disabled even when // NDEBUG is not defined #if 0 for (size_t i = 1; i < data.size(); ++i) { if (compare_indirect(data[i], data[parent(i)])) { BOOST_ASSERT (!"Element is smaller than its parent"); } } #endif } // Starting at a node, move up the tree swapping elements to preserve the // heap property void preserve_heap_property_up(size_type index) { size_type orig_index = index; size_type num_levels_moved = 0; // The first loop just saves swaps that need to be done in order to avoid // aliasing issues in its search; there is a second loop that does the // necessary swap operations if (index == 0) return; // Do nothing on root Value currently_being_moved = data[index]; distance_type currently_being_moved_dist = get(distance, currently_being_moved); for (;;) { if (index == 0) break; // Stop at root size_type parent_index = parent(index); Value parent_value = data[parent_index]; if (compare(currently_being_moved_dist, get(distance, parent_value))) { ++num_levels_moved; index = parent_index; continue; } else { break; // Heap property satisfied } } // Actually do the moves -- move num_levels_moved elements down in the // tree, then put currently_being_moved at the top index = orig_index; for (size_type i = 0; i < num_levels_moved; ++i) { size_type parent_index = parent(index); Value parent_value = data[parent_index]; put(index_in_heap, parent_value, index); data[index] = parent_value; index = parent_index; } data[index] = currently_being_moved; put(index_in_heap, currently_being_moved, index); verify_heap(); } // From the root, swap elements (each one with its smallest child) if there // are any parent-child pairs that violate the heap property void preserve_heap_property_down() { if (data.empty()) return; size_type index = 0; Value currently_being_moved = data[0]; distance_type currently_being_moved_dist = get(distance, currently_being_moved); size_type heap_size = data.size(); Value* data_ptr = &data[0]; for (;;) { size_type first_child_index = child(index, 0); if (first_child_index >= heap_size) break; /* No children */ Value* child_base_ptr = data_ptr + first_child_index; size_type smallest_child_index = 0; distance_type smallest_child_dist = get(distance, child_base_ptr[smallest_child_index]); if (first_child_index + Arity <= heap_size) { // Special case for a statically known loop count (common case) for (size_t i = 1; i < Arity; ++i) { Value i_value = child_base_ptr[i]; distance_type i_dist = get(distance, i_value); if (compare(i_dist, smallest_child_dist)) { smallest_child_index = i; smallest_child_dist = i_dist; } } } else { for (size_t i = 1; i < heap_size - first_child_index; ++i) { distance_type i_dist = get(distance, child_base_ptr[i]); if (compare(i_dist, smallest_child_dist)) { smallest_child_index = i; smallest_child_dist = i_dist; } } } if (compare(smallest_child_dist, currently_being_moved_dist)) { swap_heap_elements(smallest_child_index + first_child_index, index); index = smallest_child_index + first_child_index; continue; } else { break; // Heap property satisfied } } verify_heap(); } }; } // namespace boost #endif // BOOST_D_ARY_HEAP_HPP edge.hpp000444000765000024 716212161110607 22250 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/detail// //======================================================================= // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef BOOST_GRAPH_DETAIL_EDGE_HPP #define BOOST_GRAPH_DETAIL_EDGE_HPP #if __GNUC__ < 3 #include #else #include #endif namespace boost { namespace detail { template struct edge_base { inline edge_base() {} inline edge_base(Vertex s, Vertex d) : m_source(s), m_target(d) { } Vertex m_source; Vertex m_target; }; template class edge_desc_impl : public edge_base { typedef edge_desc_impl self; typedef edge_base Base; public: typedef void property_type; inline edge_desc_impl() : m_eproperty(0) {} inline edge_desc_impl(Vertex s, Vertex d, const property_type* eplug) : Base(s,d), m_eproperty(const_cast(eplug)) { } property_type* get_property() { return m_eproperty; } const property_type* get_property() const { return m_eproperty; } // protected: property_type* m_eproperty; }; template inline bool operator==(const detail::edge_desc_impl& a, const detail::edge_desc_impl& b) { return a.get_property() == b.get_property(); } template inline bool operator!=(const detail::edge_desc_impl& a, const detail::edge_desc_impl& b) { return ! (a.get_property() == b.get_property()); } // Order edges according to the address of their property object template inline bool operator<(const detail::edge_desc_impl& a, const detail::edge_desc_impl& b) { return a.get_property() < b.get_property(); } template inline bool operator<=(const detail::edge_desc_impl& a, const detail::edge_desc_impl& b) { return a.get_property() <= b.get_property(); } template inline bool operator>(const detail::edge_desc_impl& a, const detail::edge_desc_impl& b) { return a.get_property() > b.get_property(); } template inline bool operator>=(const detail::edge_desc_impl& a, const detail::edge_desc_impl& b) { return a.get_property() >= b.get_property(); } } //namespace detail } // namespace boost namespace std { #if __GNUC__ < 3 template std::ostream& operator<<(std::ostream& os, const boost::detail::edge_desc_impl& e) { return os << "(" << e.m_source << "," << e.m_target << ")"; } #else template std::basic_ostream& operator<<(std::basic_ostream& os, const boost::detail::edge_desc_impl& e) { return os << "(" << e.m_source << "," << e.m_target << ")"; } #endif } #endif // BOOST_GRAPH_DETAIL_DETAIL_EDGE_HPP distributed000755000765000024 012161110670 21550 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graphbreadth_first_search.hpp000444000765000024 1253412161110614 26606 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed// Copyright 2004 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_PARALLEL_BFS_HPP #define BOOST_GRAPH_PARALLEL_BFS_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include #include #include #include #include #include #include namespace boost { namespace detail { /** @brief A unary predicate that decides when to push into a * breadth-first search queue. * * This predicate stores a color map that is used to determine * when to push. If it is provided with a key for which the color * is white, it darkens the color to gray and returns true (so * that the value will be pushed appropriately); if the color is * not white, it returns false so that the vertex will be * ignored. */ template struct darken_and_push { typedef typename property_traits::key_type argument_type; typedef bool result_type; explicit darken_and_push(const ColorMap& color) : color(color) { } bool operator()(const argument_type& value) const { typedef color_traits::value_type> Color; if (get(color, value) == Color::white()) { put(color, value, Color::gray()); return true; } else { return false; } } ColorMap color; }; template struct has_not_been_seen { typedef bool result_type; has_not_been_seen() { } has_not_been_seen(std::size_t n, IndexMap index_map) : seen(n), index_map(index_map) {} template result_type operator()(Key key) { bool result = seen[get(index_map, key)]; seen[get(index_map, key)] = true; return !result; } void swap(has_not_been_seen& other) { using std::swap; swap(seen, other.seen); swap(index_map, other.index_map); } private: dynamic_bitset<> seen; IndexMap index_map; }; template inline void swap(has_not_been_seen& x, has_not_been_seen& y) { x.swap(y); } template inline void parallel_bfs_helper (DistributedGraph& g, typename graph_traits::vertex_descriptor s, ColorMap color, BFSVisitor vis, BufferRef Q, VertexIndexMap) { set_property_map_role(vertex_color, color); color.set_consistency_model(0); breadth_first_search(g, s, Q.ref, vis, color); } template void parallel_bfs_helper (DistributedGraph& g, typename graph_traits::vertex_descriptor s, ColorMap color, BFSVisitor vis, boost::param_not_found, VertexIndexMap vertex_index) { using boost::graph::parallel::process_group; typedef graph_traits Traits; typedef typename Traits::vertex_descriptor Vertex; typedef typename boost::graph::parallel::process_group_type::type process_group_type; set_property_map_role(vertex_color, color); color.set_consistency_model(0); // Buffer default typedef typename property_map ::const_type vertex_owner_map; typedef boost::graph::distributed::distributed_queue< process_group_type, vertex_owner_map, queue, detail::darken_and_push > queue_t; queue_t Q(process_group(g), get(vertex_owner, g), detail::darken_and_push(color)); breadth_first_search(g, s, Q, vis, color); } template void bfs_helper (DistributedGraph& g, typename graph_traits::vertex_descriptor s, ColorMap color, BFSVisitor vis, const bgl_named_params& params, BOOST_GRAPH_ENABLE_IF_MODELS(DistributedGraph, distributed_graph_tag, void)*) { parallel_bfs_helper (g, s, color, vis, get_param(params, buffer_param_t()), choose_const_pmap(get_param(params, vertex_index), g, vertex_index)); } } } #endif // BOOST_GRAPH_PARALLEL_BFS_HPP concepts.hpp000444000765000024 1630712161110614 24261 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine // // Distributed graph concepts and helpers // #ifndef BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP #define BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include #include #if BOOST_VERSION >= 103500 # include #endif namespace boost { class distributed_graph_tag { }; class distributed_vertex_list_graph_tag { }; class distributed_edge_list_graph_tag { }; #if BOOST_VERSION >= 103500 namespace concepts { #endif #if BOOST_VERSION < 103500 template struct DistributedVertexListGraphConcept { typedef typename graph_traits::vertex_iterator vertex_iterator; typedef typename graph_traits::vertices_size_type vertices_size_type; typedef typename graph_traits::traversal_category traversal_category; void constraints() { BOOST_CONCEPT_ASSERT(( GraphConcept )); BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept )); BOOST_CONCEPT_ASSERT(( ConvertibleConcept )); #ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if // you want to use vector_as_graph, it is! I'm sure the graph // library leaves these out all over the place. Probably a // redesign involving specializing a template with a static // member function is in order :( using boost::vertices; #endif p = vertices(g); v = *p.first; const_constraints(g); } void const_constraints(const G& cg) { #ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if // you want to use vector_as_graph, it is! I'm sure the graph // library leaves these out all over the place. Probably a // redesign involving specializing a template with a static // member function is in order :( using boost::vertices; #endif p = vertices(cg); v = *p.first; V = num_vertices(cg); } std::pair p; typename graph_traits::vertex_descriptor v; G g; vertices_size_type V; }; template struct DistributedEdgeListGraphConcept { typedef typename graph_traits::edge_descriptor edge_descriptor; typedef typename graph_traits::edge_iterator edge_iterator; typedef typename graph_traits::edges_size_type edges_size_type; typedef typename graph_traits::traversal_category traversal_category; void constraints() { BOOST_CONCEPT_ASSERT(( GraphConcept )); BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept )); BOOST_CONCEPT_ASSERT(( DefaultConstructibleConcept )); BOOST_CONCEPT_ASSERT(( EqualityComparableConcept )); BOOST_CONCEPT_ASSERT(( AssignableConcept )); BOOST_CONCEPT_ASSERT(( ConvertibleConcept )); p = edges(g); e = *p.first; u = source(e, g); v = target(e, g); const_constraints(g); } void const_constraints(const G& cg) { p = edges(cg); E = num_edges(cg); e = *p.first; u = source(e, cg); v = target(e, cg); } std::pair p; typename graph_traits::vertex_descriptor u, v; typename graph_traits::edge_descriptor e; edges_size_type E; G g; }; #else BOOST_concept(DistributedVertexListGraph,(G)) : Graph { typedef typename graph_traits::vertex_iterator vertex_iterator; typedef typename graph_traits::vertices_size_type vertices_size_type; typedef typename graph_traits::traversal_category traversal_category; ~DistributedVertexListGraph() { BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); BOOST_CONCEPT_ASSERT((Convertible)); #ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if // you want to use vector_as_graph, it is! I'm sure the graph // library leaves these out all over the place. Probably a // redesign involving specializing a template with a static // member function is in order :( using boost::vertices; #endif p = vertices(g); v = *p.first; const_constraints(g); } void const_constraints(const G& cg) { #ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if // you want to use vector_as_graph, it is! I'm sure the graph // library leaves these out all over the place. Probably a // redesign involving specializing a template with a static // member function is in order :( using boost::vertices; #endif p = vertices(cg); v = *p.first; V = num_vertices(cg); } std::pair p; typename graph_traits::vertex_descriptor v; G g; vertices_size_type V; }; BOOST_concept(DistributedEdgeListGraph,(G)) : Graph { typedef typename graph_traits::edge_descriptor edge_descriptor; typedef typename graph_traits::edge_iterator edge_iterator; typedef typename graph_traits::edges_size_type edges_size_type; typedef typename graph_traits::traversal_category traversal_category; ~DistributedEdgeListGraph() { BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); BOOST_CONCEPT_ASSERT((DefaultConstructible)); BOOST_CONCEPT_ASSERT((EqualityComparable)); BOOST_CONCEPT_ASSERT((Assignable)); BOOST_CONCEPT_ASSERT((Convertible)); p = edges(g); e = *p.first; u = source(e, g); v = target(e, g); const_constraints(g); } void const_constraints(const G& cg) { p = edges(cg); E = num_edges(cg); e = *p.first; u = source(e, cg); v = target(e, cg); } std::pair p; typename graph_traits::vertex_descriptor u, v; typename graph_traits::edge_descriptor e; edges_size_type E; G g; }; #endif #if BOOST_VERSION >= 103500 } // end namespace concepts using concepts::DistributedVertexListGraphConcept; using concepts::DistributedEdgeListGraphConcept; #endif } // end namespace boost #if BOOST_VERSION >= 103500 # include #endif #endif // BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP crauser_et_al_shortest_paths.hpp000444000765000024 6332212161110611 30401 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine /************************************************************************** * This source file implements the variation on Dijkstra's algorithm * * presented by Crauser et al. in: * * * * Andreas Crauser, Kurt Mehlhorn, Ulrich Meyer, and Peter * * Sanders. A Parallelization of Dijkstra's Shortest Path * * Algorithm. In Lubos Brim, Jozef Gruska, and Jiri Zlatuska, * * editors, Mathematical Foundations of Computer Science (MFCS), * * volume 1450 of Lecture Notes in Computer Science, pages * * 722--731, 1998. Springer. * * * * This implementation is, however, restricted to the distributed-memory * * case, where the work is distributed by virtue of the vertices being * * distributed. In a shared-memory (single address space) context, we * * would want to add an explicit balancing step. * **************************************************************************/ #ifndef BOOST_GRAPH_CRAUSER_ET_AL_SHORTEST_PATHS_HPP #define BOOST_GRAPH_CRAUSER_ET_AL_SHORTEST_PATHS_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef PBGL_ACCOUNTING # include # include #endif // PBGL_ACCOUNTING #ifdef MUTABLE_QUEUE # include #endif namespace boost { namespace graph { namespace distributed { #ifdef PBGL_ACCOUNTING struct crauser_et_al_shortest_paths_stats_t { /* Total wall-clock time used by the algorithm.*/ accounting::time_type execution_time; /* The number of vertices deleted in each superstep. */ std::vector deleted_vertices; template void print(OutputStream& out) { double avg_deletions = std::accumulate(deleted_vertices.begin(), deleted_vertices.end(), 0.0); avg_deletions /= deleted_vertices.size(); out << "Problem = \"Single-Source Shortest Paths\"\n" << "Algorithm = \"Crauser et al\"\n" << "Function = crauser_et_al_shortest_paths\n" << "Wall clock time = " << accounting::print_time(execution_time) << "\nSupersteps = " << deleted_vertices.size() << "\n" << "Avg. deletions per superstep = " << avg_deletions << "\n"; } }; static crauser_et_al_shortest_paths_stats_t crauser_et_al_shortest_paths_stats; #endif namespace detail { /************************************************************************ * Function objects that perform distance comparisons modified by the * * minimum or maximum edge weights. * ************************************************************************/ template struct min_in_distance_compare : std::binary_function { min_in_distance_compare(DistanceMap d, MinInWeightMap m, Combine combine, Compare compare) : distance_map(d), min_in_weight(m), combine(combine), compare(compare) { } bool operator()(const Vertex& x, const Vertex& y) const { return compare(combine(get(distance_map, x), -get(min_in_weight, x)), combine(get(distance_map, y), -get(min_in_weight, y))); } private: DistanceMap distance_map; MinInWeightMap min_in_weight; Combine combine; Compare compare; }; template struct min_out_distance_compare : std::binary_function { min_out_distance_compare(DistanceMap d, MinOutWeightMap m, Combine combine, Compare compare) : distance_map(d), min_out_weight(m), combine(combine), compare(compare) { } bool operator()(const Vertex& x, const Vertex& y) const { return compare(combine(get(distance_map, x), get(min_out_weight, x)), combine(get(distance_map, y), get(min_out_weight, y))); } private: DistanceMap distance_map; MinOutWeightMap min_out_weight; Combine combine; Compare compare; }; /************************************************************************/ /************************************************************************ * Dijkstra queue that implements Crauser et al.'s criteria. This queue * * actually stores three separate priority queues, to help expose all * * vertices that can be processed in a single phase. * ************************************************************************/ template class crauser_et_al_dijkstra_queue : public graph::detail::remote_update_set< crauser_et_al_dijkstra_queue< Graph, Combine, Compare, VertexIndexMap, DistanceMap, PredecessorMap, MinOutWeightMap, MinInWeightMap>, typename boost::graph::parallel::process_group_type::type, typename dijkstra_msg_value::type, typename property_map::const_type> { typedef typename graph_traits::vertex_descriptor vertex_descriptor; typedef crauser_et_al_dijkstra_queue self_type; typedef dijkstra_msg_value msg_value_creator; typedef typename msg_value_creator::type msg_value_type; typedef typename graph_traits::vertices_size_type vertices_size_type; typedef typename property_map::const_type OwnerPropertyMap; typedef typename boost::graph::parallel::process_group_type::type process_group_type; typedef graph::detail::remote_update_set inherited; // Priority queue for tentative distances typedef indirect_cmp dist_queue_compare_type; typedef typename property_traits::value_type distance_type; #ifdef MUTABLE_QUEUE typedef mutable_queue, dist_queue_compare_type, VertexIndexMap> dist_queue_type; #else typedef relaxed_heap dist_queue_type; #endif // MUTABLE_QUEUE // Priority queue for OUT criteria typedef min_out_distance_compare out_queue_compare_type; #ifdef MUTABLE_QUEUE typedef mutable_queue, out_queue_compare_type, VertexIndexMap> out_queue_type; #else typedef relaxed_heap out_queue_type; #endif // MUTABLE_QUEUE // Priority queue for IN criteria typedef min_in_distance_compare in_queue_compare_type; #ifdef MUTABLE_QUEUE typedef mutable_queue, in_queue_compare_type, VertexIndexMap> in_queue_type; #else typedef relaxed_heap in_queue_type; #endif // MUTABLE_QUEUE typedef typename process_group_type::process_id_type process_id_type; public: typedef typename dist_queue_type::size_type size_type; typedef typename dist_queue_type::value_type value_type; crauser_et_al_dijkstra_queue(const Graph& g, const Combine& combine, const Compare& compare, const VertexIndexMap& id, const DistanceMap& distance_map, const PredecessorMap& predecessor_map, const MinOutWeightMap& min_out_weight, const MinInWeightMap& min_in_weight) : inherited(boost::graph::parallel::process_group(g), get(vertex_owner, g)), dist_queue(num_vertices(g), dist_queue_compare_type(distance_map, compare), id), out_queue(num_vertices(g), out_queue_compare_type(distance_map, min_out_weight, combine, compare), id), in_queue(num_vertices(g), in_queue_compare_type(distance_map, min_in_weight, combine, compare), id), g(g), distance_map(distance_map), predecessor_map(predecessor_map), min_out_weight(min_out_weight), min_in_weight(min_in_weight), min_distance(0), min_out_distance(0) #ifdef PBGL_ACCOUNTING , local_deletions(0) #endif { } void push(const value_type& x) { msg_value_type msg_value = msg_value_creator::create(get(distance_map, x), predecessor_value(get(predecessor_map, x))); inherited::update(x, msg_value); } void update(const value_type& x) { push(x); } void pop() { // Remove from distance queue dist_queue.remove(top_vertex); // Remove from OUT queue out_queue.remove(top_vertex); // Remove from IN queue in_queue.remove(top_vertex); #ifdef PBGL_ACCOUNTING ++local_deletions; #endif } vertex_descriptor& top() { return top_vertex; } const vertex_descriptor& top() const { return top_vertex; } bool empty() { inherited::collect(); // If there are no suitable messages, wait until we get something while (!has_suitable_vertex()) { if (do_synchronize()) return true; } // Return true only if nobody has any messages; false if we // have suitable messages return false; } bool do_synchronize() { using boost::parallel::all_reduce; using boost::parallel::minimum; inherited::synchronize(); // TBD: could use combine here, but then we need to stop using // minimum() as the function object. distance_type local_distances[2]; local_distances[0] = dist_queue.empty()? (std::numeric_limits::max)() : get(distance_map, dist_queue.top()); local_distances[1] = out_queue.empty()? (std::numeric_limits::max)() : (get(distance_map, out_queue.top()) + get(min_out_weight, out_queue.top())); distance_type distances[2]; all_reduce(this->process_group, local_distances, local_distances + 2, distances, minimum()); min_distance = distances[0]; min_out_distance = distances[1]; #ifdef PBGL_ACCOUNTING std::size_t deletions = 0; all_reduce(this->process_group, &local_deletions, &local_deletions + 1, &deletions, std::plus()); if (process_id(this->process_group) == 0) { crauser_et_al_shortest_paths_stats.deleted_vertices.push_back(deletions); } local_deletions = 0; BOOST_ASSERT(deletions > 0); #endif return min_distance == (std::numeric_limits::max)(); } private: vertex_descriptor predecessor_value(vertex_descriptor v) const { return v; } vertex_descriptor predecessor_value(property_traits::reference) const { return graph_traits::null_vertex(); } bool has_suitable_vertex() const { if (!dist_queue.empty()) { top_vertex = dist_queue.top(); if (get(distance_map, dist_queue.top()) <= min_out_distance) return true; } if (!in_queue.empty()) { top_vertex = in_queue.top(); return (get(distance_map, top_vertex) - get(min_in_weight, top_vertex)) <= min_distance; } return false; } public: void receive_update(process_id_type source, vertex_descriptor vertex, distance_type distance) { // Update the queue if the received distance is better than // the distance we know locally if (distance < get(distance_map, vertex) || (distance == get(distance_map, vertex) && source == process_id(this->process_group))) { // Update the local distance map put(distance_map, vertex, distance); bool is_in_queue = dist_queue.contains(vertex); if (!is_in_queue) { dist_queue.push(vertex); out_queue.push(vertex); in_queue.push(vertex); } else { dist_queue.update(vertex); out_queue.update(vertex); in_queue.update(vertex); } } } void receive_update(process_id_type source, vertex_descriptor vertex, std::pair p) { if (p.first <= get(distance_map, vertex)) { put(predecessor_map, vertex, p.second); receive_update(source, vertex, p.first); } } private: dist_queue_type dist_queue; out_queue_type out_queue; in_queue_type in_queue; mutable value_type top_vertex; const Graph& g; DistanceMap distance_map; PredecessorMap predecessor_map; MinOutWeightMap min_out_weight; MinInWeightMap min_in_weight; distance_type min_distance; distance_type min_out_distance; #ifdef PBGL_ACCOUNTING std::size_t local_deletions; #endif }; /************************************************************************/ /************************************************************************ * Initialize the property map that contains the minimum incoming edge * * weight for each vertex. There are separate implementations for * * directed, bidirectional, and undirected graph. * ************************************************************************/ template void initialize_min_in_weights(const Graph& g, MinInWeightMap min_in_weight, WeightMap weight, Inf inf, Compare compare, directed_tag, incidence_graph_tag) { // Send minimum weights off to the owners set_property_map_role(vertex_distance, min_in_weight); BGL_FORALL_VERTICES_T(v, g, Graph) { BGL_FORALL_OUTEDGES_T(v, e, g, Graph) { if (get(weight, e) < get(min_in_weight, target(e, g))) put(min_in_weight, target(e, g), get(weight, e)); } } using boost::graph::parallel::process_group; synchronize(process_group(g)); // Replace any infinities with zeros BGL_FORALL_VERTICES_T(v, g, Graph) { if (get(min_in_weight, v) == inf) put(min_in_weight, v, 0); } } template void initialize_min_in_weights(const Graph& g, MinInWeightMap min_in_weight, WeightMap weight, Inf inf, Compare compare, directed_tag, bidirectional_graph_tag) { #if 0 typename property_map::const_type local = get(vertex_local, g); // This code assumes that the properties of the in-edges are // available locally. This is not necessarily the case, so don't // do this yet. set_property_map_role(vertex_distance, min_in_weight); BGL_FORALL_VERTICES_T(v, g, Graph) { if (in_edges(v, g).first != in_edges(v, g).second) { std::cerr << "weights(" << g.distribution().global(get(local, v)) << ") = "; BGL_FORALL_INEDGES_T(v, e, g, Graph) { std::cerr << get(weight, e) << ' '; } std::cerr << std::endl; put(min_in_weight, v, *std::min_element (make_property_map_iterator(weight, in_edges(v, g).first), make_property_map_iterator(weight, in_edges(v, g).second), compare)); } else { put(min_in_weight, v, 0); } std::cerr << "miw(" << g.distribution().global(get(local, v)) << ") = " << get(min_in_weight, v) << std::endl; } #else initialize_min_in_weights(g, min_in_weight, weight, inf, compare, directed_tag(), incidence_graph_tag()); #endif } template inline void initialize_min_in_weights(const Graph&, MinInWeightMap, WeightMap, Inf, Compare, undirected_tag, bidirectional_graph_tag) { // In weights are the same as out weights, so do nothing } /************************************************************************/ /************************************************************************ * Initialize the property map that contains the minimum outgoing edge * * weight for each vertex. * ************************************************************************/ template void initialize_min_out_weights(const Graph& g, MinOutWeightMap min_out_weight, WeightMap weight, Compare compare) { typedef typename property_traits::value_type weight_type; BGL_FORALL_VERTICES_T(v, g, Graph) { if (out_edges(v, g).first != out_edges(v, g).second) { put(min_out_weight, v, *std::min_element (make_property_map_iterator(weight, out_edges(v, g).first), make_property_map_iterator(weight, out_edges(v, g).second), compare)); if (get(min_out_weight, v) < weight_type(0)) boost::throw_exception(negative_edge()); } } } /************************************************************************/ } // end namespace detail template void crauser_et_al_shortest_paths (const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight, IndexMap index_map, ColorMap color_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { typedef typename boost::graph::parallel::process_group_type::type process_group_type; typedef typename process_group_type::process_id_type process_id_type; typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertices_size_type vertices_size_type; #ifdef PBGL_ACCOUNTING crauser_et_al_shortest_paths_stats.deleted_vertices.clear(); crauser_et_al_shortest_paths_stats.execution_time = accounting::get_time(); #endif // Property map that stores the lowest edge weight outgoing from // each vertex. If a vertex has no out-edges, the stored weight // is zero. typedef typename property_traits::value_type weight_type; typedef iterator_property_map MinOutWeightMap; std::vector min_out_weights_vec(num_vertices(g), inf); MinOutWeightMap min_out_weight(&min_out_weights_vec.front(), index_map); detail::initialize_min_out_weights(g, min_out_weight, weight, compare); // Property map that stores the lowest edge weight incoming to // each vertex. For undirected graphs, this will just be a // shallow copy of the version for outgoing edges. typedef typename graph_traits::directed_category directed_category; const bool is_undirected = is_same::value; typedef MinOutWeightMap MinInWeightMap; std::vector min_in_weights_vec(is_undirected? 1 : num_vertices(g), inf); MinInWeightMap min_in_weight(&min_in_weights_vec.front(), index_map); typedef typename graph_traits::traversal_category category; detail::initialize_min_in_weights(g, min_in_weight, weight, inf, compare, directed_category(), category()); // Initialize local portion of property maps typename graph_traits::vertex_iterator ui, ui_end; for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) { put(distance, *ui, inf); put(predecessor, *ui, *ui); } put(distance, s, zero); // Dijkstra Queue typedef detail::crauser_et_al_dijkstra_queue Queue; Queue Q(g, combine, compare, index_map, distance, predecessor, min_out_weight, is_undirected? min_out_weight : min_in_weight); // Parallel Dijkstra visitor ::boost::detail::dijkstra_bfs_visitor< DijkstraVisitor, Queue, WeightMap, boost::parallel::caching_property_map, boost::parallel::caching_property_map, Combine, Compare > bfs_vis(vis, Q, weight, boost::parallel::make_caching_property_map(predecessor), boost::parallel::make_caching_property_map(distance), combine, compare, zero); set_property_map_role(vertex_color, color_map); set_property_map_role(vertex_distance, distance); breadth_first_search(g, s, Q, bfs_vis, color_map); #ifdef PBGL_ACCOUNTING crauser_et_al_shortest_paths_stats.execution_time = accounting::get_time() - crauser_et_al_shortest_paths_stats.execution_time; #endif } template void crauser_et_al_shortest_paths (const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight) { typedef typename property_traits::value_type distance_type; std::vector colors(num_vertices(g), white_color); crauser_et_al_shortest_paths(g, s, predecessor, distance, weight, get(vertex_index, g), make_iterator_property_map(&colors[0], get(vertex_index, g)), std::less(), closed_plus(), (std::numeric_limits::max)(), distance_type(), dijkstra_visitor<>()); } template void crauser_et_al_shortest_paths (const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance) { crauser_et_al_shortest_paths(g, s, predecessor, distance, get(edge_weight, g)); } } // end namespace distributed #ifdef PBGL_ACCOUNTING using distributed::crauser_et_al_shortest_paths_stats; #endif using distributed::crauser_et_al_shortest_paths; } } // end namespace boost::graph #endif // BOOST_GRAPH_CRAUSER_ET_AL_SHORTEST_PATHS_HPP dijkstra_shortest_paths.hpp000444000765000024 2133312161110602 27400 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_PARALLEL_DIJKSTRA_HPP #define BOOST_GRAPH_PARALLEL_DIJKSTRA_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include #include #include #include namespace boost { namespace graph { namespace detail { template struct parallel_dijkstra_impl2 { template static void run(const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, typename property_traits::value_type lookahead, WeightMap weight, IndexMap index_map, ColorMap color_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { eager_dijkstra_shortest_paths(g, s, predecessor, distance, lookahead, weight, index_map, color_map, compare, combine, inf, zero, vis); } }; template<> struct parallel_dijkstra_impl2< ::boost::param_not_found > { template static void run(const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, ::boost::param_not_found, WeightMap weight, IndexMap index_map, ColorMap color_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { crauser_et_al_shortest_paths(g, s, predecessor, distance, weight, index_map, color_map, compare, combine, inf, zero, vis); } }; template struct parallel_dijkstra_impl { template static void run(const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, Lookahead lookahead, WeightMap weight, IndexMap index_map, ColorMap color_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { graph::detail::parallel_dijkstra_impl2 ::run(g, s, predecessor, distance, lookahead, weight, index_map, color_map, compare, combine, inf, zero, vis); } }; template<> struct parallel_dijkstra_impl< ::boost::param_not_found > { private: template static void run_impl(const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, Lookahead lookahead, WeightMap weight, IndexMap index_map, ColorMap color_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { BGL_FORALL_VERTICES_T(u, g, DistributedGraph) BGL_FORALL_OUTEDGES_T(u, e, g, DistributedGraph) local_put(color_map, target(e, g), white_color); graph::detail::parallel_dijkstra_impl2 ::run(g, s, predecessor, distance, lookahead, weight, index_map, color_map, compare, combine, inf, zero, vis); } public: template static void run(const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, Lookahead lookahead, WeightMap weight, IndexMap index_map, ::boost::param_not_found, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { typedef typename graph_traits::vertices_size_type vertices_size_type; vertices_size_type n = num_vertices(g); std::vector colors(n, white_color); run_impl(g, s, predecessor, distance, lookahead, weight, index_map, make_iterator_property_map(colors.begin(), index_map), compare, combine, inf, zero, vis); } }; } } // end namespace graph::detail /** Dijkstra's single-source shortest paths algorithm for distributed * graphs. * * Also implements the heuristics of: * * Andreas Crauser, Kurt Mehlhorn, Ulrich Meyer, and Peter * Sanders. A Parallelization of Dijkstra's Shortest Path * Algorithm. In Lubos Brim, Jozef Gruska, and Jiri Zlatuska, * editors, Mathematical Foundations of Computer Science (MFCS), * volume 1450 of Lecture Notes in Computer Science, pages * 722--731, 1998. Springer. */ template inline void dijkstra_shortest_paths (const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, WeightMap weight, IndexMap index_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis, const bgl_named_params& params BOOST_GRAPH_ENABLE_IF_MODELS_PARM(DistributedGraph,distributed_graph_tag)) { typedef typename graph_traits::vertices_size_type vertices_size_type; // Build a distributed property map for vertex colors, if we need it bool use_default_color_map = is_default_param(get_param(params, vertex_color)); vertices_size_type n = use_default_color_map? num_vertices(g) : 1; std::vector color(n, white_color); typedef iterator_property_map::iterator, IndexMap> DefColorMap; DefColorMap color_map(color.begin(), index_map); typedef typename get_param_type< vertex_color_t, bgl_named_params >::type color_map_type; graph::detail::parallel_dijkstra_impl ::run(g, s, predecessor, distance, get_param(params, lookahead_t()), weight, index_map, get_param(params, vertex_color), compare, combine, inf, zero, vis); } } // end namespace boost #endif // BOOST_GRAPH_PARALLEL_DIJKSTRA_HPP eager_dijkstra_shortest_paths.hpp000444000765000024 4113112161110615 30545 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine /************************************************************************** * This source file implements a variation on distributed Dijkstra's * * algorithm that can expose additional parallelism by permitting * * vertices within a certain distance from the minimum to be processed, * * even though they may not be at their final distance. This can * * introduce looping, but the algorithm will still terminate so long as * * there are no negative loops. * **************************************************************************/ #ifndef BOOST_GRAPH_EAGER_DIJKSTRA_SHORTEST_PATHS_HPP #define BOOST_GRAPH_EAGER_DIJKSTRA_SHORTEST_PATHS_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include #include #include #include #include #include #include #ifdef PBGL_ACCOUNTING # include # include #endif // PBGL_ACCOUNTING #ifdef MUTABLE_QUEUE # include #endif namespace boost { namespace graph { namespace distributed { #ifdef PBGL_ACCOUNTING struct eager_dijkstra_shortest_paths_stats_t { /* The value of the lookahead parameter. */ double lookahead; /* Total wall-clock time used by the algorithm.*/ accounting::time_type execution_time; /* The number of vertices deleted in each superstep. */ std::vector deleted_vertices; template void print(OutputStream& out) { double avg_deletions = std::accumulate(deleted_vertices.begin(), deleted_vertices.end(), 0.0); avg_deletions /= deleted_vertices.size(); out << "Problem = \"Single-Source Shortest Paths\"\n" << "Algorithm = \"Eager Dijkstra\"\n" << "Function = eager_dijkstra_shortest_paths\n" << "(P) Lookahead = " << lookahead << "\n" << "Wall clock time = " << accounting::print_time(execution_time) << "\nSupersteps = " << deleted_vertices.size() << "\n" << "Avg. deletions per superstep = " << avg_deletions << "\n"; } }; static eager_dijkstra_shortest_paths_stats_t eager_dijkstra_shortest_paths_stats; #endif namespace detail { // Borrowed from BGL's dijkstra_shortest_paths template struct parallel_dijkstra_bfs_visitor : bfs_visitor<> { typedef typename property_traits::value_type distance_type; parallel_dijkstra_bfs_visitor(UniformCostVisitor vis, Queue& Q, WeightMap w, PredecessorMap p, DistanceMap d, BinaryFunction combine, BinaryPredicate compare, distance_type zero) : m_vis(vis), m_Q(Q), m_weight(w), m_predecessor(p), m_distance(d), m_combine(combine), m_compare(compare), m_zero(zero) { } template void initialize_vertex(Vertex u, Graph& g) { m_vis.initialize_vertex(u, g); } template void discover_vertex(Vertex u, Graph& g) { m_vis.discover_vertex(u, g); } template void examine_vertex(Vertex u, Graph& g) { m_vis.examine_vertex(u, g); } /* Since the eager formulation of Parallel Dijkstra's algorithm can loop, we may relax on *any* edge, not just those associated with white and gray targets. */ template void examine_edge(Edge e, Graph& g) { if (m_compare(get(m_weight, e), m_zero)) boost::throw_exception(negative_edge()); m_vis.examine_edge(e, g); boost::parallel::caching_property_map c_pred(m_predecessor); boost::parallel::caching_property_map c_dist(m_distance); distance_type old_distance = get(c_dist, target(e, g)); bool m_decreased = relax(e, g, m_weight, c_pred, c_dist, m_combine, m_compare); /* On x86 Linux with optimization, we sometimes get into a horrible case where m_decreased is true but the distance hasn't actually changed. This occurs when the comparison inside relax() occurs with the 80-bit precision of the x87 floating point unit, but the difference is lost when the resulting values are written back to lower-precision memory (e.g., a double). With the eager Dijkstra's implementation, this results in looping. */ if (m_decreased && old_distance != get(c_dist, target(e, g))) { m_Q.update(target(e, g)); m_vis.edge_relaxed(e, g); } else m_vis.edge_not_relaxed(e, g); } template void finish_vertex(Vertex u, Graph& g) { m_vis.finish_vertex(u, g); } UniformCostVisitor m_vis; Queue& m_Q; WeightMap m_weight; PredecessorMap m_predecessor; DistanceMap m_distance; BinaryFunction m_combine; BinaryPredicate m_compare; distance_type m_zero; }; /********************************************************************** * Dijkstra queue that implements arbitrary "lookahead" * **********************************************************************/ template class lookahead_dijkstra_queue : public graph::detail::remote_update_set< lookahead_dijkstra_queue< Graph, Combine, Compare, VertexIndexMap, DistanceMap, PredecessorMap>, typename boost::graph::parallel::process_group_type::type, typename dijkstra_msg_value::type, typename property_map::const_type> { typedef typename graph_traits::vertex_descriptor vertex_descriptor; typedef lookahead_dijkstra_queue self_type; typedef typename boost::graph::parallel::process_group_type::type process_group_type; typedef dijkstra_msg_value msg_value_creator; typedef typename msg_value_creator::type msg_value_type; typedef typename property_map::const_type OwnerPropertyMap; typedef graph::detail::remote_update_set inherited; // Priority queue for tentative distances typedef indirect_cmp queue_compare_type; typedef typename property_traits::value_type distance_type; #ifdef MUTABLE_QUEUE typedef mutable_queue, queue_compare_type, VertexIndexMap> queue_type; #else typedef relaxed_heap queue_type; #endif // MUTABLE_QUEUE typedef typename process_group_type::process_id_type process_id_type; public: typedef vertex_descriptor value_type; lookahead_dijkstra_queue(const Graph& g, const Combine& combine, const Compare& compare, const VertexIndexMap& id, const DistanceMap& distance_map, const PredecessorMap& predecessor_map, distance_type lookahead) : inherited(boost::graph::parallel::process_group(g), get(vertex_owner, g)), queue(num_vertices(g), queue_compare_type(distance_map, compare), id), distance_map(distance_map), predecessor_map(predecessor_map), min_distance(0), lookahead(lookahead) #ifdef PBGL_ACCOUNTING , local_deletions(0) #endif { } void push(const value_type& x) { msg_value_type msg_value = msg_value_creator::create(get(distance_map, x), predecessor_value(get(predecessor_map, x))); inherited::update(x, msg_value); } void update(const value_type& x) { push(x); } void pop() { queue.pop(); #ifdef PBGL_ACCOUNTING ++local_deletions; #endif } value_type& top() { return queue.top(); } const value_type& top() const { return queue.top(); } bool empty() { inherited::collect(); // If there are no suitable messages, wait until we get something while (!has_suitable_vertex()) { if (do_synchronize()) return true; } // Return true only if nobody has any messages; false if we // have suitable messages return false; } private: vertex_descriptor predecessor_value(vertex_descriptor v) const { return v; } vertex_descriptor predecessor_value(property_traits::reference) const { return graph_traits::null_vertex(); } bool has_suitable_vertex() const { return (!queue.empty() && get(distance_map, queue.top()) <= min_distance + lookahead); } bool do_synchronize() { using boost::parallel::all_reduce; using boost::parallel::minimum; inherited::synchronize(); // TBD: could use combine here, but then we need to stop using // minimum() as the function object. distance_type local_distance = queue.empty()? (std::numeric_limits::max)() : get(distance_map, queue.top()); all_reduce(this->process_group, &local_distance, &local_distance + 1, &min_distance, minimum()); #ifdef PBGL_ACCOUNTING std::size_t deletions = 0; all_reduce(this->process_group, &local_deletions, &local_deletions + 1, &deletions, std::plus()); if (process_id(this->process_group) == 0) eager_dijkstra_shortest_paths_stats.deleted_vertices .push_back(deletions); local_deletions = 0; BOOST_ASSERT(deletions > 0); #endif return min_distance == (std::numeric_limits::max)(); } public: void receive_update(process_id_type source, vertex_descriptor vertex, distance_type distance) { // Update the queue if the received distance is better than // the distance we know locally if (distance <= get(distance_map, vertex)) { // Update the local distance map put(distance_map, vertex, distance); bool is_in_queue = queue.contains(vertex); if (!is_in_queue) queue.push(vertex); else queue.update(vertex); } } void receive_update(process_id_type source, vertex_descriptor vertex, std::pair p) { if (p.first <= get(distance_map, vertex)) { put(predecessor_map, vertex, p.second); receive_update(source, vertex, p.first); } } private: queue_type queue; DistanceMap distance_map; PredecessorMap predecessor_map; distance_type min_distance; distance_type lookahead; #ifdef PBGL_ACCOUNTING std::size_t local_deletions; #endif }; /**********************************************************************/ } // end namespace detail template void eager_dijkstra_shortest_paths (const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, typename property_traits::value_type lookahead, WeightMap weight, IndexMap index_map, ColorMap color_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { typedef typename boost::graph::parallel::process_group_type::type process_group_type; typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertices_size_type vertices_size_type; #ifdef PBGL_ACCOUNTING eager_dijkstra_shortest_paths_stats.deleted_vertices.clear(); eager_dijkstra_shortest_paths_stats.lookahead = lookahead; eager_dijkstra_shortest_paths_stats.execution_time = accounting::get_time(); #endif // Initialize local portion of property maps typename graph_traits::vertex_iterator ui, ui_end; for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) { put(distance, *ui, inf); put(predecessor, *ui, *ui); } put(distance, s, zero); // Dijkstra Queue typedef detail::lookahead_dijkstra_queue Queue; Queue Q(g, combine, compare, index_map, distance, predecessor, lookahead); // Parallel Dijkstra visitor detail::parallel_dijkstra_bfs_visitor bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, zero); set_property_map_role(vertex_color, color_map); set_property_map_role(vertex_distance, distance); breadth_first_search(g, s, Q, bfs_vis, color_map); #ifdef PBGL_ACCOUNTING eager_dijkstra_shortest_paths_stats.execution_time = accounting::get_time() - eager_dijkstra_shortest_paths_stats.execution_time; #endif } template void eager_dijkstra_shortest_paths (const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, typename property_traits::value_type lookahead, WeightMap weight) { typedef typename property_traits::value_type distance_type; std::vector colors(num_vertices(g), white_color); eager_dijkstra_shortest_paths(g, s, predecessor, distance, lookahead, weight, get(vertex_index, g), make_iterator_property_map(&colors[0], get(vertex_index, g)), std::less(), closed_plus(), distance_type(), (std::numeric_limits::max)(), dijkstra_visitor<>()); } template void eager_dijkstra_shortest_paths (const DistributedGraph& g, typename graph_traits::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, typename property_traits::value_type lookahead) { eager_dijkstra_shortest_paths(g, s, predecessor, distance, lookahead, get(edge_weight, g)); } } // end namespace distributed #ifdef PBGL_ACCOUNTING using distributed::eager_dijkstra_shortest_paths_stats; #endif using distributed::eager_dijkstra_shortest_paths; } } // end namespace boost::graph #endif // BOOST_GRAPH_EAGER_DIJKSTRA_SHORTEST_PATHS_HPP queue.hpp000444000765000024 2443712161110625 23574 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_DISTRIBUTED_QUEUE_HPP #define BOOST_GRAPH_DISTRIBUTED_QUEUE_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include #include namespace boost { namespace graph { namespace distributed { /// A unary predicate that always returns "true". struct always_push { template bool operator()(const T&) const { return true; } }; /** A distributed queue adaptor. * * Class template @c distributed_queue implements a distributed queue * across a process group. The distributed queue is an adaptor over an * existing (local) queue, which must model the @ref Buffer * concept. Each process stores a distinct copy of the local queue, * from which it draws or removes elements via the @ref pop and @ref * top members. * * The value type of the local queue must be a model of the @ref * GlobalDescriptor concept. The @ref push operation of the * distributed queue passes (via a message) the value to its owning * processor. Thus, the elements within a particular local queue are * guaranteed to have the process owning that local queue as an owner. * * Synchronization of distributed queues occurs in the @ref empty and * @ref size functions, which will only return "empty" values (true or * 0, respectively) when the entire distributed queue is empty. If the * local queue is empty but the distributed queue is not, the * operation will block until either condition changes. When the @ref * size function of a nonempty queue returns, it returns the size of * the local queue. These semantics were selected so that sequential * code that processes elements in the queue via the following idiom * can be parallelized via introduction of a distributed queue: * * distributed_queue<...> Q; * Q.push(x); * while (!Q.empty()) { * // do something, that may push a value onto Q * } * * In the parallel version, the initial @ref push operation will place * the value @c x onto its owner's queue. All processes will * synchronize at the call to empty, and only the process owning @c x * will be allowed to execute the loop (@ref Q.empty() returns * false). This iteration may in turn push values onto other remote * queues, so when that process finishes execution of the loop body * and all processes synchronize again in @ref empty, more processes * may have nonempty local queues to execute. Once all local queues * are empty, @ref Q.empty() returns @c false for all processes. * * The distributed queue can receive messages at two different times: * during synchronization and when polling @ref empty. Messages are * always received during synchronization, to ensure that accurate * local queue sizes can be determines. However, whether @ref empty * should poll for messages is specified as an option to the * constructor. Polling may be desired when the order in which * elements in the queue are processed is not important, because it * permits fewer synchronization steps and less communication * overhead. However, when more strict ordering guarantees are * required, polling may be semantically incorrect. By disabling * polling, one ensures that parallel execution using the idiom above * will not process an element at a later "level" before an earlier * "level". * * The distributed queue nearly models the @ref Buffer * concept. However, the @ref push routine does not necessarily * increase the result of @c size() by one (although the size of the * global queue does increase by one). */ template class distributed_queue { typedef distributed_queue self_type; enum { /** Message indicating a remote push. The message contains a * single value x of type value_type that is to be pushed on the * receiver's queue. */ msg_push, /** Push many elements at once. */ msg_multipush }; public: typedef ProcessGroup process_group_type; typedef Buffer buffer_type; typedef typename buffer_type::value_type value_type; typedef typename buffer_type::size_type size_type; /** Construct a new distributed queue. * * Build a new distributed queue that communicates over the given @p * process_group, whose local queue is initialized via @p buffer and * which may or may not poll for messages. */ explicit distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, const Buffer& buffer, bool polling = false); /** Construct a new distributed queue. * * Build a new distributed queue that communicates over the given @p * process_group, whose local queue is initialized via @p buffer and * which may or may not poll for messages. */ explicit distributed_queue(const ProcessGroup& process_group = ProcessGroup(), const OwnerMap& owner = OwnerMap(), const Buffer& buffer = Buffer(), const UnaryPredicate& pred = UnaryPredicate(), bool polling = false); /** Construct a new distributed queue. * * Build a new distributed queue that communicates over the given @p * process_group, whose local queue is default-initalized and which * may or may not poll for messages. */ distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, const UnaryPredicate& pred, bool polling = false); /** Virtual destructor required with virtual functions. * */ virtual ~distributed_queue() {} /** Push an element onto the distributed queue. * * The element will be sent to its owner process to be added to that * process's local queue. If polling is enabled for this queue and * the owner process is the current process, the value will be * immediately pushed onto the local queue. * * Complexity: O(1) messages of size O(sizeof(value_type)) will be * transmitted. */ void push(const value_type& x); /** Pop an element off the local queue. * * @p @c !empty() */ void pop() { buffer.pop(); } /** * Return the element at the top of the local queue. * * @p @c !empty() */ value_type& top() { return buffer.top(); } /** * \overload */ const value_type& top() const { return buffer.top(); } /** Determine if the queue is empty. * * When the local queue is nonempty, returns @c true. If the local * queue is empty, synchronizes with all other processes in the * process group until either (1) the local queue is nonempty * (returns @c true) (2) the entire distributed queue is empty * (returns @c false). */ bool empty() const; /** Determine the size of the local queue. * * The behavior of this routine is equivalent to the behavior of * @ref empty, except that when @ref empty returns true this * function returns the size of the local queue and when @ref empty * returns false this function returns zero. */ size_type size() const; // private: /** Synchronize the distributed queue and determine if all queues * are empty. * * \returns \c true when all local queues are empty, or false if at least * one of the local queues is nonempty. * Defined as virtual for derived classes like depth_limited_distributed_queue. */ virtual bool do_synchronize() const; private: // Setup triggers void setup_triggers(); // Message handlers void handle_push(int source, int tag, const value_type& value, trigger_receive_context); void handle_multipush(int source, int tag, const std::vector& values, trigger_receive_context); mutable ProcessGroup process_group; OwnerMap owner; mutable Buffer buffer; UnaryPredicate pred; bool polling; typedef std::vector outgoing_buffer_t; typedef std::vector outgoing_buffers_t; shared_ptr outgoing_buffers; }; /// Helper macro containing the normal names for the template /// parameters to distributed_queue. #define BOOST_DISTRIBUTED_QUEUE_PARMS \ typename ProcessGroup, typename OwnerMap, typename Buffer, \ typename UnaryPredicate /// Helper macro containing the normal template-id for /// distributed_queue. #define BOOST_DISTRIBUTED_QUEUE_TYPE \ distributed_queue /** Synchronize all processes involved with the given distributed queue. * * This function will synchronize all of the local queues for a given * distributed queue, by ensuring that no additional messages are in * transit. It is rarely required by the user, because most * synchronization of distributed queues occurs via the @c empty or @c * size methods. */ template inline void synchronize(const BOOST_DISTRIBUTED_QUEUE_TYPE& Q) { Q.do_synchronize(); } /// Construct a new distributed queue. template inline distributed_queue make_distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, const Buffer& buffer, bool polling = false) { typedef distributed_queue result_type; return result_type(process_group, owner, buffer, polling); } } } } // end namespace boost::graph::distributed #include #undef BOOST_DISTRIBUTED_QUEUE_TYPE #undef BOOST_DISTRIBUTED_QUEUE_PARMS #endif // BOOST_GRAPH_DISTRIBUTED_QUEUE_HPP two_bit_color_map.hpp000444000765000024 1007512161110622 26140 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed// Copyright (C) 2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Jeremiah Willcock // Andrew Lumsdaine // Distributed version of the two-bit color map #ifndef BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP #define BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include namespace boost { template class two_bit_color_map > : public parallel::distributed_property_map > { typedef two_bit_color_map local_map; typedef parallel::distributed_property_map inherited; typedef local_property_map index_map_type; public: two_bit_color_map(std::size_t inital_size, const index_map_type& index = index_map_type()) : inherited(index.process_group(), index.global(), local_map(inital_size, index.base())) { } inherited& base() { return *this; } const inherited& base() const { return *this; } }; template inline two_bit_color_type get(two_bit_color_map > const& pm, typename property_traits::key_type key) { return get(pm.base(), key); } template inline void put(two_bit_color_map > const& pm, typename property_traits::key_type key, two_bit_color_type value) { put(pm.base(), key, value); } template class two_bit_color_map > : public parallel::distributed_property_map< ProcessGroup, GlobalMap, two_bit_color_map > { typedef two_bit_color_map local_map; typedef parallel::distributed_property_map inherited; typedef parallel::distributed_property_map index_map_type; public: two_bit_color_map(std::size_t inital_size, const index_map_type& index = index_map_type()) : inherited(index.process_group(), index.global(), local_map(inital_size, index.base())) { } inherited& base() { return *this; } const inherited& base() const { return *this; } }; template inline two_bit_color_type get(two_bit_color_map< parallel::distributed_property_map< ProcessGroup, GlobalMap, two_bit_color_map > > const& pm, typename property_traits::key_type key) { return get(pm.base(), key); } template inline void put(two_bit_color_map< parallel::distributed_property_map< ProcessGroup, GlobalMap, two_bit_color_map > > const& pm, typename property_traits::key_type key, two_bit_color_type value) { put(pm.base(), key, value); } } // end namespace boost #endif // BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP unsafe_serialize.hpp000444000765000024 545012161110670 25752 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed// Copyright (C) 2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine // This file contains the "unsafe_serialize" routine, which transforms // types they may not be serializable (such as void*) into // serializable equivalents. #ifndef PBGL_UNSAFE_SERIALIZE_HPP #define PBGL_UNSAFE_SERIALIZE_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include #include #include #include #include #include BOOST_IS_BITWISE_SERIALIZABLE(void*) namespace boost { namespace mpi { template<> struct is_mpi_datatype : mpl::true_ { }; } } // end namespace boost::mpi namespace boost { typedef mpl::if_c<(sizeof(int) == sizeof(void*)), int, mpl::if_c<(sizeof(long) == sizeof(void*)), long, mpl::if_c<(sizeof(void*) <= sizeof(boost::intmax_t)), boost::intmax_t, void>::type >::type >::type ptr_serialize_type; BOOST_STATIC_ASSERT ((!boost::is_void::value)); template inline T& unsafe_serialize(T& x) { return x; } inline ptr_serialize_type& unsafe_serialize(void*& x) { return reinterpret_cast(x); } // Force Boost.MPI to serialize a void* like a ptr_serialize_type namespace mpi { template<> inline MPI_Datatype get_mpi_datatype(void* const& x) { return get_mpi_datatype(); } } template struct unsafe_pair { unsafe_pair() { } unsafe_pair(const T& t, const U& u) : first(t), second(u) { } unsafe_pair(const std::pair& p) : first(p.first), second(p.second) { } T first; U second; template void serialize(Archiver& ar, const unsigned /*version*/) { ar & unsafe_serialize(first) & unsafe_serialize(second); } }; template bool operator<(unsafe_pair const& x, unsafe_pair const& y) { return std::make_pair(x.first, x.second) < std::make_pair(y.first, y.second); } } // end namespace boost #endif // PBGL_UNSAFE_SERIALIZE_HPP detail000755000765000024 012161110647 23016 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributeddijkstra_shortest_paths.hpp000444000765000024 350612161110647 30635 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed/detail// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_PARALLEL_DIJKSTRA_DETAIL_HPP #define BOOST_GRAPH_PARALLEL_DIJKSTRA_DETAIL_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include namespace boost { namespace graph { namespace distributed { namespace detail { /********************************************************************** * Dijkstra queue message data * **********************************************************************/ template class dijkstra_msg_value { typedef typename property_traits::value_type distance_type; typedef typename property_traits::value_type predecessor_type; public: typedef std::pair type; static type create(distance_type dist, predecessor_type pred) { return std::make_pair(dist, pred); } }; template class dijkstra_msg_value { typedef typename property_traits::key_type vertex_descriptor; public: typedef typename property_traits::value_type type; static type create(type dist, vertex_descriptor) { return dist; } }; /**********************************************************************/ } } } } // end namespace boost::graph::distributed::detail #endif // BOOST_GRAPH_PARALLEL_DIJKSTRA_DETAIL_HPP filtered_queue.hpp000444000765000024 576412161110631 26673 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed/detail// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_FILTERED_QUEUE_HPP #define BOOST_FILTERED_QUEUE_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include namespace boost { /** Queue adaptor that filters elements pushed into the queue * according to some predicate. */ template class filtered_queue { public: typedef Buffer buffer_type; typedef Predicate predicate_type; typedef typename Buffer::value_type value_type; typedef typename Buffer::size_type size_type; /** * Constructs a new filtered queue with an initial buffer and a * predicate. * * @param buffer the initial buffer * @param pred the predicate */ explicit filtered_queue(const buffer_type& buffer = buffer_type(), const predicate_type& pred = predicate_type()) : buffer(buffer), pred(pred) {} /** Push a value into the queue. * * If the predicate returns @c true for @p x, pushes @p x into the * buffer. */ void push(const value_type& x) { if (pred(x)) buffer.push(x); } /** Pop the front element off the buffer. * * @pre @c !empty() */ void pop() { buffer.pop(); } /** Retrieve the front (top) element in the buffer. * * @pre @c !empty() */ value_type& top() { return buffer.top(); } /** * \overload */ const value_type& top() const { return buffer.top(); } /** Determine the number of elements in the buffer. */ size_type size() const { return buffer.size(); } /** Determine if the buffer is empty. */ bool empty() const { return buffer.empty(); } /** Get a reference to the underlying buffer. */ buffer_type& base() { return buffer; } const buffer_type& base() const { return buffer; } /** Swap the contents of this with @p other. */ void swap(filtered_queue& other) { using std::swap; swap(buffer, other.buffer); swap(pred, other.pred); } private: buffer_type buffer; predicate_type pred; }; /** Create a filtered queue. */ template inline filtered_queue make_filtered_queue(const Buffer& buffer, const Predicate& pred) { return filtered_queue(buffer, pred); } /** Swap a filtered_queue. */ template inline void swap(filtered_queue& x, filtered_queue& y) { x.swap(y); } } // end namespace boost #endif // BOOST_FILTERED_QUEUE_HPP queue.ipp000444000765000024 1224612161110611 25025 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed/detail// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #include #include #include #include #include #include #include #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif namespace boost { namespace graph { namespace distributed { template BOOST_DISTRIBUTED_QUEUE_TYPE:: distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, const Buffer& buffer, bool polling) : process_group(process_group, attach_distributed_object()), owner(owner), buffer(buffer), polling(polling) { if (!polling) outgoing_buffers.reset( new outgoing_buffers_t(num_processes(process_group))); setup_triggers(); } template BOOST_DISTRIBUTED_QUEUE_TYPE:: distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, const Buffer& buffer, const UnaryPredicate& pred, bool polling) : process_group(process_group, attach_distributed_object()), owner(owner), buffer(buffer), pred(pred), polling(polling) { if (!polling) outgoing_buffers.reset( new outgoing_buffers_t(num_processes(process_group))); setup_triggers(); } template BOOST_DISTRIBUTED_QUEUE_TYPE:: distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, const UnaryPredicate& pred, bool polling) : process_group(process_group, attach_distributed_object()), owner(owner), pred(pred), polling(polling) { if (!polling) outgoing_buffers.reset( new outgoing_buffers_t(num_processes(process_group))); setup_triggers(); } template void BOOST_DISTRIBUTED_QUEUE_TYPE::push(const value_type& x) { typename ProcessGroup::process_id_type dest = get(owner, x); if (outgoing_buffers) outgoing_buffers->at(dest).push_back(x); else if (dest == process_id(process_group)) buffer.push(x); else send(process_group, get(owner, x), msg_push, x); } template bool BOOST_DISTRIBUTED_QUEUE_TYPE::empty() const { /* Processes will stay here until the buffer is nonempty or synchronization with the other processes indicates that all local buffers are empty (and no messages are in transit). */ while (buffer.empty() && !do_synchronize()) ; return buffer.empty(); } template typename BOOST_DISTRIBUTED_QUEUE_TYPE::size_type BOOST_DISTRIBUTED_QUEUE_TYPE::size() const { empty(); return buffer.size(); } template void BOOST_DISTRIBUTED_QUEUE_TYPE::setup_triggers() { using boost::graph::parallel::simple_trigger; simple_trigger(process_group, msg_push, this, &distributed_queue::handle_push); simple_trigger(process_group, msg_multipush, this, &distributed_queue::handle_multipush); } template void BOOST_DISTRIBUTED_QUEUE_TYPE:: handle_push(int /*source*/, int /*tag*/, const value_type& value, trigger_receive_context) { if (pred(value)) buffer.push(value); } template void BOOST_DISTRIBUTED_QUEUE_TYPE:: handle_multipush(int /*source*/, int /*tag*/, const std::vector& values, trigger_receive_context) { for (std::size_t i = 0; i < values.size(); ++i) if (pred(values[i])) buffer.push(values[i]); } template bool BOOST_DISTRIBUTED_QUEUE_TYPE::do_synchronize() const { #ifdef PBGL_ACCOUNTING ++num_synchronizations; #endif using boost::parallel::all_reduce; using std::swap; typedef typename ProcessGroup::process_id_type process_id_type; if (outgoing_buffers) { // Transfer all of the push requests process_id_type id = process_id(process_group); process_id_type np = num_processes(process_group); for (process_id_type dest = 0; dest < np; ++dest) { outgoing_buffer_t& outgoing = outgoing_buffers->at(dest); std::size_t size = outgoing.size(); if (size != 0) { if (dest != id) { send(process_group, dest, msg_multipush, outgoing); } else { for (std::size_t i = 0; i < size; ++i) buffer.push(outgoing[i]); } outgoing.clear(); } } } synchronize(process_group); unsigned local_size = buffer.size(); unsigned global_size = all_reduce(process_group, local_size, std::plus()); return global_size == 0; } } } } // end namespace boost::graph::distributed remote_update_set.hpp000444000765000024 1760312161110636 27421 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/distributed/detail// Copyright (C) 2005-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_DETAIL_REMOTE_UPDATE_SET_HPP #define BOOST_GRAPH_DETAIL_REMOTE_UPDATE_SET_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include #include #include #include #include namespace boost { namespace graph { namespace detail { template void do_synchronize(ProcessGroup& pg) { using boost::parallel::synchronize; synchronize(pg); } struct remote_set_queued {}; struct remote_set_immediate {}; template class remote_set_semantics { BOOST_STATIC_CONSTANT (bool, queued = (is_convertible< typename ProcessGroup::communication_category, parallel::bsp_process_group_tag>::value)); public: typedef typename mpl::if_c::type type; }; template::type> class remote_update_set; /********************************************************************** * Remote updating set that queues messages until synchronization * **********************************************************************/ template class remote_update_set { typedef typename property_traits::key_type Key; typedef std::vector > Updates; typedef typename Updates::size_type updates_size_type; typedef typename Updates::value_type updates_pair_type; public: private: typedef typename ProcessGroup::process_id_type process_id_type; enum message_kind { /** Message containing the number of updates that will be sent in * a msg_updates message that will immediately follow. This * message will contain a single value of type * updates_size_type. */ msg_num_updates, /** Contains (key, value) pairs with all of the updates from a * particular source. The number of updates is variable, but will * be provided in a msg_num_updates message that immediately * preceeds this message. * */ msg_updates }; struct handle_messages { explicit handle_messages(remote_update_set* self, const ProcessGroup& pg) : self(self), update_sizes(num_processes(pg), 0) { } void operator()(process_id_type source, int tag) { switch(tag) { case msg_num_updates: { // Receive the # of updates updates_size_type num_updates; receive(self->process_group, source, tag, num_updates); update_sizes[source] = num_updates; } break; case msg_updates: { updates_size_type num_updates = update_sizes[source]; BOOST_ASSERT(num_updates); // Receive the actual updates std::vector updates(num_updates); receive(self->process_group, source, msg_updates, &updates[0], num_updates); // Send updates to derived "receive_update" member Derived* derived = static_cast(self); for (updates_size_type u = 0; u < num_updates; ++u) derived->receive_update(source, updates[u].first, updates[u].second); update_sizes[source] = 0; } break; }; } private: remote_update_set* self; std::vector update_sizes; }; friend struct handle_messages; protected: remote_update_set(const ProcessGroup& pg, const OwnerMap& owner) : process_group(pg, handle_messages(this, pg)), updates(num_processes(pg)), owner(owner) { } void update(const Key& key, const Value& value) { if (get(owner, key) == process_id(process_group)) { Derived* derived = static_cast(this); derived->receive_update(get(owner, key), key, value); } else { updates[get(owner, key)].push_back(std::make_pair(key, value)); } } void collect() { } void synchronize() { // Emit all updates and then remove them process_id_type num_processes = updates.size(); for (process_id_type p = 0; p < num_processes; ++p) { if (!updates[p].empty()) { send(process_group, p, msg_num_updates, updates[p].size()); send(process_group, p, msg_updates, &updates[p].front(), updates[p].size()); updates[p].clear(); } } do_synchronize(process_group); } ProcessGroup process_group; private: std::vector updates; OwnerMap owner; }; /********************************************************************** * Remote updating set that sends messages immediately * **********************************************************************/ template class remote_update_set { typedef typename property_traits::key_type Key; typedef std::pair update_pair_type; typedef typename std::vector::size_type updates_size_type; public: typedef typename ProcessGroup::process_id_type process_id_type; private: enum message_kind { /** Contains a (key, value) pair that will be updated. */ msg_update }; struct handle_messages { explicit handle_messages(remote_update_set* self, const ProcessGroup& pg) : self(self) { update_sizes.resize(num_processes(pg), 0); } void operator()(process_id_type source, int tag) { // Receive the # of updates BOOST_ASSERT(tag == msg_update); update_pair_type update; receive(self->process_group, source, tag, update); // Send update to derived "receive_update" member Derived* derived = static_cast(self); derived->receive_update(source, update.first, update.second); } private: std::vector update_sizes; remote_update_set* self; }; friend struct handle_messages; protected: remote_update_set(const ProcessGroup& pg, const OwnerMap& owner) : process_group(pg, handle_messages(this, pg)), owner(owner) { } void update(const Key& key, const Value& value) { if (get(owner, key) == process_id(process_group)) { Derived* derived = static_cast(this); derived->receive_update(get(owner, key), key, value); } else send(process_group, get(owner, key), msg_update, update_pair_type(key, value)); } void collect() { typedef std::pair probe_type; handle_messages handler(this, process_group); while (optional stp = probe(process_group)) if (stp->second == msg_update) handler(stp->first, stp->second); } void synchronize() { do_synchronize(process_group); } ProcessGroup process_group; OwnerMap owner; }; } } } // end namespace boost::graph::detail #endif // BOOST_GRAPH_DETAIL_REMOTE_UPDATE_SET_HPP parallel000755000765000024 012161110667 21030 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graphalgorithm.hpp000444000765000024 503112161110610 23647 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallel// Copyright 2004 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_PARALLEL_ALGORITHM_HPP #define BOOST_PARALLEL_ALGORITHM_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include // for BOOST_STATIC_CONSTANT #include #include namespace boost { namespace parallel { template struct is_commutative { BOOST_STATIC_CONSTANT(bool, value = false); }; template struct minimum : std::binary_function { const T& operator()(const T& x, const T& y) const { return x < y? x : y; } }; template struct maximum : std::binary_function { const T& operator()(const T& x, const T& y) const { return x < y? y : x; } }; template struct sum : std::binary_function { const T operator()(const T& x, const T& y) const { return x + y; } }; template OutputIterator reduce(ProcessGroup pg, typename ProcessGroup::process_id_type root, InputIterator first, InputIterator last, OutputIterator out, BinaryOperation bin_op); template inline T all_reduce(ProcessGroup pg, const T& value, BinaryOperation bin_op) { T result; all_reduce(pg, const_cast(&value), const_cast(&value+1), &result, bin_op); return result; } template inline T scan(ProcessGroup pg, const T& value, BinaryOperation bin_op) { T result; scan(pg, const_cast(&value), const_cast(&value+1), &result, bin_op); return result; } template void all_gather(ProcessGroup pg, InputIterator first, InputIterator last, std::vector& out); } } // end namespace boost::parallel #include #endif // BOOST_PARALLEL_ALGORITHM_HPP basic_reduce.hpp000444000765000024 255212161110640 24301 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallel// Copyright 2005 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_PARALLEL_BASIC_REDUCE_HPP #define BOOST_PARALLEL_BASIC_REDUCE_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif namespace boost { namespace parallel { /** Reduction operation used to reconcile differences between local * and remote values for a particular key in a property map. The * type @c T is typically the @c value_type of the property * map. This basic reduction returns a default-constructed @c T as * the default value and always resolves to the remote value. */ template struct basic_reduce { BOOST_STATIC_CONSTANT(bool, non_default_resolver = false); /// Returns a default-constructed T object template T operator()(const Key&) const { return T(); } /// Returns the remote value template const T& operator()(const Key&, const T&, const T& remote) const { return remote; } }; } } // end namespace boost::parallel #endif // BOOST_PARALLEL_BASIC_REDUCE_HPP container_traits.hpp000444000765000024 240712161110603 25237 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallel// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine // // This file contains traits that describe // #ifndef BOOST_GRAPH_PARALLEL_CONTAINER_TRAITS_HPP #define BOOST_GRAPH_PARALLEL_CONTAINER_TRAITS_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif namespace boost { namespace graph { namespace parallel { template struct process_group_type { typedef typename T::process_group_type type; }; template inline typename process_group_type::type process_group(const T& x) { return x.process_group(); } // Helper function that algorithms should use to get the process group // out of a container. template inline typename process_group_type::type process_group_adl(const Container& container) { return process_group(container); } } } } // end namespace boost::graph::parallel #endif // BOOST_GRAPH_PARALLEL_CONTAINER_TRAITS_HPP process_group.hpp000444000765000024 724712161110651 24573 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallel// Copyright 2004 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_PARALLEL_PROCESS_GROUP_HPP #define BOOST_GRAPH_PARALLEL_PROCESS_GROUP_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include namespace boost { namespace graph { namespace parallel { /** * A special type used as a flag to a process group constructor that * indicates that the copy of a process group will represent a new * distributed data structure. */ struct attach_distributed_object { }; /** * Describes the context in which a trigger is being invoked to * receive a message. */ enum trigger_receive_context { /// No trigger is active at this time. trc_none, /// The trigger is being invoked during synchronization, at the end /// of a superstep. trc_in_synchronization, /// The trigger is being invoked as an "early" receive of a message /// that was sent through the normal "send" operations to be /// received by the end of the superstep, but the process group sent /// the message earlier to clear its buffers. trc_early_receive, /// The trigger is being invoked for an out-of-band message, which /// must be handled immediately. trc_out_of_band, /// The trigger is being invoked for an out-of-band message, which /// must be handled immediately and has alredy been received by /// an MPI_IRecv call. trc_irecv_out_of_band }; // Process group tags struct process_group_tag {}; struct linear_process_group_tag : virtual process_group_tag {}; struct messaging_process_group_tag : virtual process_group_tag {}; struct immediate_process_group_tag : virtual messaging_process_group_tag {}; struct bsp_process_group_tag : virtual messaging_process_group_tag {}; struct batch_process_group_tag : virtual messaging_process_group_tag {}; struct locking_process_group_tag : virtual process_group_tag {}; struct spawning_process_group_tag : virtual process_group_tag {}; struct process_group_archetype { typedef int process_id_type; }; void wait(process_group_archetype&); void synchronize(process_group_archetype&); int process_id(const process_group_archetype&); int num_processes(const process_group_archetype&); template void send(process_group_archetype&, int, int, const T&); template process_group_archetype::process_id_type receive(const process_group_archetype& pg, process_group_archetype::process_id_type source, int tag, T& value); template std::pair receive(const process_group_archetype& pg, int tag, T values[], std::size_t n); template std::pair receive(const process_group_archetype& pg, process_group_archetype::process_id_type source, int tag, T values[], std::size_t n); } } } // end namespace boost::graph::parallel namespace boost { namespace graph { namespace distributed { using parallel::trigger_receive_context; using parallel::trc_early_receive; using parallel::trc_out_of_band; using parallel::trc_irecv_out_of_band; using parallel::trc_in_synchronization; using parallel::trc_none; using parallel::attach_distributed_object; } } } // end namespace boost::graph::distributed #endif // BOOST_GRAPH_PARALLEL_PROCESS_GROUP_HPP properties.hpp000444000765000024 661612161110630 24071 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallel// Copyright 2004 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_PARALLEL_PROPERTIES_HPP #define BOOST_GRAPH_PARALLEL_PROPERTIES_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include namespace boost { /*************************************************************************** * Property map reduction operations ***************************************************************************/ /** * Metafunction that produces a reduction operation for the given * property. The default behavior merely forwards to @ref * basic_reduce, but it is expected that this class template will be * specified for important properties. */ template struct property_reduce { template class apply : public parallel::basic_reduce {}; }; /** * Reduction of vertex colors can only darken, not lighten, the * color. Black cannot turn black, grey can only turn black, and * white can be changed to either color. The default color is white. */ template<> struct property_reduce { template class apply { typedef color_traits traits; public: BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); template Color operator()(const Key&) const { return traits::white(); } template Color operator()(const Key&, Color local, Color remote) const { if (local == traits::white()) return remote; else if (remote == traits::black()) return remote; else return local; } }; }; /** * Reduction of a distance always takes the shorter distance. The * default distance value is the maximum value for the data type. */ template<> struct property_reduce { template class apply { public: BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); template T operator()(const Key&) const { return (std::numeric_limits::max)(); } template T operator()(const Key&, T x, T y) const { return x < y? x : y; } }; }; template<> struct property_reduce { template class apply { public: BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); T operator()(T key) const { return key; } T operator()(T key, T, T y) const { return y; } }; }; template inline void set_property_map_role(Property p, PropertyMap pm) { typedef typename property_traits::value_type value_type; typedef property_reduce property_red; typedef typename property_red::template apply reduce; pm.set_reduce(reduce()); } } // end namespace boost #endif // BOOST_GRAPH_PARALLEL_PROPERTIES_HPP simple_trigger.hpp000444000765000024 712512161110667 24717 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallel// Copyright (C) 2007 Douglas Gregor // Use, modification and distribution is subject to the 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 a simplification of the "trigger" method for // process groups. The simple trigger handles the common case where // the handler associated with a trigger is a member function bound to // a particular pointer. #ifndef BOOST_GRAPH_PARALLEL_SIMPLE_TRIGGER_HPP #define BOOST_GRAPH_PARALLEL_SIMPLE_TRIGGER_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include namespace boost { namespace graph { namespace parallel { namespace detail { /** * INTERNAL ONLY * * The actual function object that bridges from the normal trigger * interface to the simplified interface. This is the equivalent of * bind(pmf, self, _1, _2, _3, _4), but without the compile-time * overhead of bind. */ template class simple_trigger_t { public: simple_trigger_t(Class* self, Result (Class::*pmf)(int, int, const T&, trigger_receive_context)) : self(self), pmf(pmf) { } Result operator()(int source, int tag, const T& data, trigger_receive_context context) const { return (self->*pmf)(source, tag, data, context); } private: Class* self; Result (Class::*pmf)(int, int, const T&, trigger_receive_context); }; } // end namespace detail /** * Simplified trigger interface that reduces the amount of code * required to connect a process group trigger to a handler that is * just a bound member function. * * INTERNAL ONLY */ template inline void simple_trigger(ProcessGroup& pg, int tag, Class* self, void (Class::*pmf)(int source, int tag, const T& data, trigger_receive_context context), int) { pg.template trigger(tag, detail::simple_trigger_t(self, pmf)); } /** * Simplified trigger interface that reduces the amount of code * required to connect a process group trigger with a reply to a * handler that is just a bound member function. * * INTERNAL ONLY */ template inline void simple_trigger(ProcessGroup& pg, int tag, Class* self, Result (Class::*pmf)(int source, int tag, const T& data, trigger_receive_context context), long) { pg.template trigger_with_reply (tag, detail::simple_trigger_t(self, pmf)); } /** * Simplified trigger interface that reduces the amount of code * required to connect a process group trigger to a handler that is * just a bound member function. */ template inline void simple_trigger(ProcessGroup& pg, int tag, Class* self, Result (Class::*pmf)(int source, int tag, const T& data, trigger_receive_context context)) { // We pass 0 (an int) to help VC++ disambiguate calls to simple_trigger // with Result=void. simple_trigger(pg, tag, self, pmf, 0); } } } } // end namespace boost::graph::parallel #endif // BOOST_GRAPH_PARALLEL_SIMPLE_TRIGGER_HPP detail000755000765000024 012161110700 22256 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallelinplace_all_to_all.hpp000444000765000024 470412161110700 26726 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallel/detail// Copyright 2005 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_GRAPH_PARALLEL_INPLACE_ALL_TO_ALL_HPP #define BOOST_GRAPH_PARALLEL_INPLACE_ALL_TO_ALL_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif // // Implements the inplace all-to-all communication algorithm. // #include #include namespace boost { namespace parallel { template // where {LinearProcessGroup, MessagingProcessGroup} void inplace_all_to_all(ProcessGroup pg, const std::vector >& outgoing, std::vector >& incoming) { typedef typename std::vector::size_type size_type; typedef typename ProcessGroup::process_size_type process_size_type; typedef typename ProcessGroup::process_id_type process_id_type; process_size_type p = num_processes(pg); // Make sure there are no straggling messages synchronize(pg); // Send along the count (always) and the data (if count > 0) for (process_id_type dest = 0; dest < p; ++dest) { if (dest != process_id(pg)) { send(pg, dest, 0, outgoing[dest].size()); if (!outgoing[dest].empty()) send(pg, dest, 1, &outgoing[dest].front(), outgoing[dest].size()); } } // Make sure all of the data gets transferred synchronize(pg); // Receive the sizes and data for (process_id_type source = 0; source < p; ++source) { if (source != process_id(pg)) { size_type size; receive(pg, source, 0, size); incoming[source].resize(size); if (size > 0) receive(pg, source, 1, &incoming[source].front(), size); } else if (&incoming != &outgoing) { incoming[source] = outgoing[source]; } } } template // where {LinearProcessGroup, MessagingProcessGroup} void inplace_all_to_all(ProcessGroup pg, std::vector >& data) { inplace_all_to_all(pg, data, data); } } } // end namespace boost::parallel #endif // BOOST_GRAPH_PARALLEL_INPLACE_ALL_TO_ALL_HPP untracked_pair.hpp000444000765000024 505012161110660 26124 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/parallel/detail// Copyright (C) 2007 Matthias Troyer // // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // // This file contains helper data structures for use in transmitting // properties. The basic idea is to optimize away any storage for the // properties when no properties are specified. #ifndef BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP #define BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless has been included" #endif #include #include // for std::pair #include namespace boost { namespace parallel { namespace detail { /** * This structure is like std::pair, with the only difference * that tracking in the serialization library is turned off. */ template struct untracked_pair : public std::pair { untracked_pair() {} untracked_pair(const T& t, const U& u) : std::pair(t,u) {} template untracked_pair(std::pair const& p) : std::pair(p) {} }; template inline untracked_pair make_untracked_pair(const T& t, const U& u) { return untracked_pair(t,u); } } } } // end namespace boost::parallel::detail namespace boost { namespace mpi { template struct is_mpi_datatype > : is_mpi_datatype > {}; } } // end namespace boost::mpi namespace boost { namespace serialization { // pair template inline void serialize( Archive & ar, boost::parallel::detail::untracked_pair & p, const unsigned int /* file_version */ ){ ar & boost::serialization::make_nvp("first", p.first); ar & boost::serialization::make_nvp("second", p.second); } template struct is_bitwise_serializable< boost::parallel::detail::untracked_pair > : is_bitwise_serializable > {}; template struct implementation_level > : mpl::int_ {} ; template struct tracking_level > : mpl::int_ {} ; } } // end namespace boost::serialization #endif // BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP property_maps000755000765000024 012161110667 22140 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graphconstant_property_map.hpp000444000765000024 477712161110646 27454 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/property_maps// (C) Copyright 2007-2009 Andrew Sutton // // Use, modification and distribution are 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) #ifndef BOOST_GRAPH_CONSTANT_PROPERTY_HPP #define BOOST_GRAPH_CONSTANT_PROPERTY_HPP #include // TODO: This should really be part of the property maps library rather than // the Boost.Graph library. namespace boost { /** * A constant property is one, that regardless of the edge or vertex given, * will always return a constant value. */ template struct constant_property_map : public boost::put_get_helper< const Value&, constant_property_map > { typedef Key key_type; typedef Value value_type; typedef const Value& reference; typedef boost::readable_property_map_tag category; constant_property_map() : m_value() { } constant_property_map(const value_type &value) : m_value(value) { } constant_property_map(const constant_property_map& copy) : m_value(copy.m_value) { } inline reference operator [](const key_type&) const { return m_value; } value_type m_value; }; template inline constant_property_map make_constant_property(const Value& value) { return constant_property_map(value); } /** * Same as above, but pretends to be writable as well. */ template struct constant_writable_property_map { typedef Key key_type; typedef Value value_type; typedef Value& reference; typedef boost::read_write_property_map_tag category; constant_writable_property_map() : m_value() { } constant_writable_property_map(const value_type &value) : m_value(value) { } constant_writable_property_map(const constant_writable_property_map& copy) : m_value(copy.m_value) { } friend Value get(const constant_writable_property_map& me, Key) {return me.m_value;} friend void put(const constant_writable_property_map&, Key, Value) {} value_type m_value; }; template inline constant_writable_property_map make_constant_writable_property(const Value& value) { return constant_writable_property_map(value); } } /* namespace boost */ #endif null_property_map.hpp000444000765000024 251712161110667 26566 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/graph/property_maps// (C) Copyright Andrew Sutton 2007 // // Use, modification and distribution are 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) #ifndef BOOST_GRAPH_NULL_PROPERTY_HPP #define BOOST_GRAPH_NULL_PROPERTY_HPP #include // TODO: This should really be part of the property maps library rather than // the Boost.Graph library. namespace boost { // A null property is somewhat like the inverse of the constant // property map except that instead of returning a single value, // this eats any writes and cannot be read from. template struct null_property_map { typedef Key key_type; typedef Value value_type; typedef void reference; typedef boost::writable_property_map_tag category; }; // The null_property_map only has a put() function. template void put(null_property_map& /*pm*/, const K& /*key*/, const V& /*value*/) { } // A helper function for intantiating null property maps. template inline null_property_map make_null_property() { return null_property_map(); } } #endif integer000755000765000024 012161110652 17562 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostinteger_mask.hpp000444000765000024 1013712161110614 23120 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/integer// 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 static_log2.hpp000444000765000024 712312161110652 22645 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/integer// -------------- 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 intrusive000755000765000024 012161110625 20155 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boostpointer_traits.hpp000444000765000024 2440412161110625 24115 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/intrusive////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Pablo Halpern 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) // ////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 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) // // See http://www.boost.org/libs/intrusive for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_INTRUSIVE_POINTER_TRAITS_HPP #define BOOST_INTRUSIVE_POINTER_TRAITS_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include #include #include #include #include namespace boost { namespace intrusive { //! pointer_traits is the implementation of C++11 std::pointer_traits class with some //! extensions like castings. //! //! pointer_traits supplies a uniform interface to certain attributes of pointer-like types. template struct pointer_traits { #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED //!The pointer type //!queried by this pointer_traits instantiation typedef Ptr pointer; //!Ptr::element_type if such a type exists; otherwise, T if Ptr is a class //!template instantiation of the form SomePointer, where Args is zero or //!more type arguments ; otherwise , the specialization is ill-formed. typedef unspecified_type element_type; //!Ptr::difference_type if such a type exists; otherwise, //!std::ptrdiff_t. typedef unspecified_type difference_type; //!Ptr::rebind if such a type exists; otherwise, SomePointer if Ptr is //!a class template instantiation of the form SomePointer, where Args is zero or //!more type arguments ; otherwise, the instantiation of rebind is ill-formed. //! //!For portable code for C++03 and C++11,

typename rebind_pointer::type
//!shall be used instead of rebind to obtain a pointer to U. template using rebind = unspecified; //!Ptr::rebind if such a type exists; otherwise, SomePointer if Ptr is //!a class template instantiation of the form SomePointer, where Args is zero or //!more type arguments ; otherwise, the instantiation of rebind is ill-formed. //! typedef element_type &reference; #else typedef Ptr pointer; // typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT ( boost::intrusive::detail::, Ptr, element_type , boost::intrusive::detail::first_param) element_type; // typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT (boost::intrusive::detail::, Ptr, difference_type, std::ptrdiff_t) difference_type; // typedef typename boost::intrusive::detail::unvoid::type& reference; // template struct rebind_pointer { typedef typename boost::intrusive::detail::type_rebinder::type type; }; #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) template using rebind = typename boost::intrusive::detail::type_rebinder::type; #endif #endif //#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) //! Remark: If element_type is (possibly cv-qualified) void, r type is unspecified; otherwise, //! it is element_type &. //! //! Returns: A dereferenceable pointer to r obtained by calling Ptr::pointer_to(r). //! Non-standard extension: If such function does not exist, returns pointer(addressof(r)); static pointer pointer_to(reference r) { //Non-standard extension, it does not require Ptr::pointer_to. If not present //tries to converts &r to pointer. const bool value = boost::intrusive::detail:: has_member_function_callable_with_pointer_to ::type>::value; ::boost::integral_constant flag; return pointer_traits::priv_pointer_to(flag, r); } //! Remark: Non-standard extension. //! //! Returns: A dereferenceable pointer to r obtained by calling Ptr::static_cast_from(r). //! If such function does not exist, returns pointer_to(static_cast(*uptr)) template static pointer static_cast_from(const UPtr &uptr) { const bool value = boost::intrusive::detail:: has_member_function_callable_with_static_cast_from ::value; ::boost::integral_constant flag; return pointer_traits::priv_static_cast_from(flag, uptr); } //! Remark: Non-standard extension. //! //! Returns: A dereferenceable pointer to r obtained by calling Ptr::const_cast_from(r). //! If such function does not exist, returns pointer_to(const_cast(*uptr)) template static pointer const_cast_from(const UPtr &uptr) { const bool value = boost::intrusive::detail:: has_member_function_callable_with_const_cast_from ::value; ::boost::integral_constant flag; return pointer_traits::priv_const_cast_from(flag, uptr); } //! Remark: Non-standard extension. //! //! Returns: A dereferenceable pointer to r obtained by calling Ptr::dynamic_cast_from(r). //! If such function does not exist, returns pointer_to(*dynamic_cast(&*uptr)) template static pointer dynamic_cast_from(const UPtr &uptr) { const bool value = boost::intrusive::detail:: has_member_function_callable_with_dynamic_cast_from ::value; ::boost::integral_constant flag; return pointer_traits::priv_dynamic_cast_from(flag, uptr); } ///@cond private: //priv_to_raw_pointer template static T* to_raw_pointer(T* p) { return p; } template static typename pointer_traits::element_type* to_raw_pointer(const Pointer &p) { return pointer_traits::to_raw_pointer(p.operator->()); } //priv_pointer_to static pointer priv_pointer_to(boost::true_type, typename boost::intrusive::detail::unvoid::type& r) { return Ptr::pointer_to(r); } static pointer priv_pointer_to(boost::false_type, typename boost::intrusive::detail::unvoid::type& r) { return pointer(boost::intrusive::detail::addressof(r)); } //priv_static_cast_from template static pointer priv_static_cast_from(boost::true_type, const UPtr &uptr) { return Ptr::static_cast_from(uptr); } template static pointer priv_static_cast_from(boost::false_type, const UPtr &uptr) { return pointer_to(*static_cast(to_raw_pointer(uptr))); } //priv_const_cast_from template static pointer priv_const_cast_from(boost::true_type, const UPtr &uptr) { return Ptr::const_cast_from(uptr); } template static pointer priv_const_cast_from(boost::false_type, const UPtr &uptr) { return pointer_to(const_cast(*uptr)); } //priv_dynamic_cast_from template static pointer priv_dynamic_cast_from(boost::true_type, const UPtr &uptr) { return Ptr::dynamic_cast_from(uptr); } template static pointer priv_dynamic_cast_from(boost::false_type, const UPtr &uptr) { return pointer_to(*dynamic_cast(&*uptr)); } ///@endcond }; ///@cond // Remove cv qualification from Ptr parameter to pointer_traits: template struct pointer_traits : pointer_traits {}; template struct pointer_traits : pointer_traits { }; template struct pointer_traits : pointer_traits { }; // Remove reference from Ptr parameter to pointer_traits: template struct pointer_traits : pointer_traits { }; ///@endcond //! Specialization of pointer_traits for raw pointers //! template struct pointer_traits { typedef T element_type; typedef T* pointer; typedef std::ptrdiff_t difference_type; #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED typedef T & reference; //!typedef for
U *
//! //!For portable code for C++03 and C++11,
typename rebind_pointer::type
//!shall be used instead of rebind to obtain a pointer to U. template using rebind = U*; #else typedef typename boost::intrusive::detail::unvoid::type& reference; #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) template using rebind = U*; #endif #endif template struct rebind_pointer { typedef U* type; }; //! Returns: addressof(r) //! static pointer pointer_to(reference r) { return boost::intrusive::detail::addressof(r); } //! Returns: static_cast(uptr) //! template static pointer static_cast_from(U *uptr) { return static_cast(uptr); } //! Returns: const_cast(uptr) //! template static pointer const_cast_from(U *uptr) { return const_cast(uptr); } //! Returns: dynamic_cast(uptr) //! template static pointer dynamic_cast_from(U *uptr) { return dynamic_cast(uptr); } }; } //namespace container { } //namespace boost { #include #endif // ! defined(BOOST_INTRUSIVE_POINTER_TRAITS_HPP) detail000755000765000024 012161110655 21422 5ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/intrusiveconfig_begin.hpp000444000765000024 431512161110655 24704 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/intrusive/detail///////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2006-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) // // See http://www.boost.org/libs/intrusive for documentation. // ///////////////////////////////////////////////////////////////////////////// #ifndef BOOST_INTRUSIVE_CONFIG_INCLUDED #define BOOST_INTRUSIVE_CONFIG_INCLUDED #include #endif #ifdef BOOST_MSVC #pragma warning (push) // //'function' : resolved overload was found by argument-dependent lookup //A function found by argument-dependent lookup (Koenig lookup) was eventually //chosen by overload resolution. // //In Visual C++ .NET and earlier compilers, a different function would have //been called. To pick the original function, use an explicitly qualified name. // //warning C4275: non dll-interface class 'x' used as base for //dll-interface class 'Y' #pragma warning (disable : 4275) //warning C4251: 'x' : class 'y' needs to have dll-interface to //be used by clients of class 'z' #pragma warning (disable : 4251) #pragma warning (disable : 4675) #pragma warning (disable : 4996) #pragma warning (disable : 4503) #pragma warning (disable : 4284) // odd return type for operator-> #pragma warning (disable : 4244) // possible loss of data #pragma warning (disable : 4521) ////Disable "multiple copy constructors specified" #pragma warning (disable : 4522) #pragma warning (disable : 4146) #pragma warning (disable : 4267) //conversion from 'X' to 'Y', possible loss of data #pragma warning (disable : 4127) //conditional expression is constant #pragma warning (disable : 4706) //assignment within conditional expression #pragma warning (disable : 4541) //'typeid' used on polymorphic type 'boost::exception' with /GR- #pragma warning (disable : 4512) //'typeid' used on polymorphic type 'boost::exception' with /GR- #endif //#define BOOST_INTRUSIVE_USE_ITERATOR_FACADE //#define BOOST_INTRUSIVE_USE_ITERATOR_ENABLE_IF_CONVERTIBLE config_end.hpp000444000765000024 77712161110637 24356 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/intrusive/detail///////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2006-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) // // See http://www.boost.org/libs/intrusive for documentation. // ///////////////////////////////////////////////////////////////////////////// #if defined BOOST_MSVC #pragma warning (pop) #endif has_member_function_callable_with.hpp000444000765000024 4273212161110644 31177 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/intrusive/detail////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 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) // // See http://www.boost.org/libs/intrusive for documentation. // ////////////////////////////////////////////////////////////////////////////// // sample.h #if !defined(BOOST_PP_IS_ITERATING) #ifndef BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_DETAILS_INCLUDED #define BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_DETAILS_INCLUDED #include #include #include #include #include #include //Mark that we don't support 0 arg calls due to compiler ICE in GCC 3.4/4.0/4.1 and //wrong SFINAE for GCC 4.2/4.3 #if defined(__GNUC__) && !defined(__clang__) && ((__GNUC__*100 + __GNUC_MINOR__*10) >= 340) && ((__GNUC__*100 + __GNUC_MINOR__*10) <= 430) #define BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED #elif defined(BOOST_INTEL) && (BOOST_INTEL < 1200 ) #define BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED #endif namespace boost_intrusive_has_member_function_callable_with { struct dont_care { dont_care(...); }; struct private_type { static private_type p; private_type const &operator,(int) const; }; typedef char yes_type; // sizeof(yes_type) == 1 struct no_type{ char dummy[2]; }; // sizeof(no_type) == 2 template no_type is_private_type(T const &); yes_type is_private_type(private_type const &); } //boost_intrusive_has_member_function_callable_with #include #endif //BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_DETAILS_INCLUDED #else //!BOOST_PP_IS_ITERATING #ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME not defined!" #endif #ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN not defined!" #endif #ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END not defined!" #endif #if BOOST_PP_ITERATION_START() != 0 #error "BOOST_PP_ITERATION_START() must be zero (0)" #endif #if BOOST_PP_ITERATION() == 0 BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN template class BOOST_PP_CAT(has_member_function_named_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) { struct BaseMixin { void BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME(); }; struct Base : public ::boost::intrusive::detail::remove_cv::type, public BaseMixin { Base(); }; template class Helper{}; template static boost_intrusive_has_member_function_callable_with::no_type deduce (U*, Helper* = 0); static boost_intrusive_has_member_function_callable_with::yes_type deduce(...); public: static const bool value = sizeof(boost_intrusive_has_member_function_callable_with::yes_type) == sizeof(deduce((Base*)(0))); }; #if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) template struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl); //! template struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl) { static const bool value = false; }; //! #if !defined(_MSC_VER) || (_MSC_VER < 1600) #if defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED) template struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) { //Mark that we don't support 0 arg calls due to compiler ICE in GCC 3.4/4.0/4.1 and //wrong SFINAE for GCC 4.2/4.3 static const bool value = true; }; #else //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED) //Special case for 0 args template< class F , std::size_t N = sizeof((boost::move_detail::declval(). BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME (), 0))> struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) { boost_intrusive_has_member_function_callable_with::yes_type dummy; BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int); }; //For buggy compilers like MSVC 7.1+ ((F*)0)->func() does not //SFINAE-out the zeroarg_checker_ instantiation but sizeof yields to 0. template struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) { boost_intrusive_has_member_function_callable_with::no_type dummy; BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int); }; template struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) { template static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)*); template static boost_intrusive_has_member_function_callable_with::no_type Test(...); static const bool value = sizeof(Test< Fun >(0)) == sizeof(boost_intrusive_has_member_function_callable_with::yes_type); }; #endif //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED) #else //#if !defined(_MSC_VER) || (_MSC_VER < 1600) template struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) { template static decltype( boost::move_detail::declval().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME() , boost_intrusive_has_member_function_callable_with::yes_type()) Test(Fun*); template static boost_intrusive_has_member_function_callable_with::no_type Test(...); static const bool value = sizeof(Test(0)) == sizeof(boost_intrusive_has_member_function_callable_with::yes_type); }; #endif //#if !defined(_MSC_VER) || (_MSC_VER < 1600) #else //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) template struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl); template struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) { static const bool value = false; }; //Special case for 0 args template< class F , std::size_t N = sizeof((boost::move_detail::declval(). BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME (), 0))> struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) { boost_intrusive_has_member_function_callable_with::yes_type dummy; BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int); }; //For buggy compilers like MSVC 7.1+ ((F*)0)->func() does not //SFINAE-out the zeroarg_checker_ instantiation but sizeof yields to 0. template struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) { boost_intrusive_has_member_function_callable_with::no_type dummy; BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int); }; template struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) { template static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)*); template static boost_intrusive_has_member_function_callable_with::no_type Test(...); static const bool value = sizeof(Test< Fun >(0)) == sizeof(boost_intrusive_has_member_function_callable_with::yes_type); }; template struct BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME ) : Fun { BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )(); using Fun::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME; boost_intrusive_has_member_function_callable_with::private_type BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME ( DontCares...) const; }; template struct BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl) { template struct make_dontcare { typedef boost_intrusive_has_member_function_callable_with::dont_care type; }; typedef BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME ) ::type...> FunWrap; static bool const value = (sizeof(boost_intrusive_has_member_function_callable_with::no_type) == sizeof(boost_intrusive_has_member_function_callable_with::is_private_type ( (::boost::move_detail::declval< FunWrap >(). BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME ( ::boost::move_detail::declval()... ), 0) ) ) ); }; template struct BOOST_PP_CAT( has_member_function_callable_with_ , BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) : public BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_ , BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) < Fun , BOOST_PP_CAT( has_member_function_named_ , BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )::value , Args... > {}; #endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END #else //BOOST_PP_ITERATION() == 0 #if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN template struct BOOST_PP_CAT( BOOST_PP_CAT(funwrap, BOOST_PP_ITERATION()) , BOOST_PP_CAT(_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)) : Fun { BOOST_PP_CAT( BOOST_PP_CAT(funwrap, BOOST_PP_ITERATION()) , BOOST_PP_CAT(_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME))(); using Fun::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME; boost_intrusive_has_member_function_callable_with::private_type BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME ( BOOST_PP_ENUM(BOOST_PP_ITERATION() , BOOST_INTRUSIVE_PP_IDENTITY , boost_intrusive_has_member_function_callable_with::dont_care)) const; }; template struct BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_ , BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) { typedef BOOST_PP_CAT( BOOST_PP_CAT(funwrap, BOOST_PP_ITERATION()) , BOOST_PP_CAT(_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)) FunWrap; static bool const value = (sizeof(boost_intrusive_has_member_function_callable_with::no_type) == sizeof(boost_intrusive_has_member_function_callable_with::is_private_type ( (boost::move_detail::declval(). BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME ( BOOST_PP_ENUM( BOOST_PP_ITERATION(), BOOST_INTRUSIVE_PP_DECLVAL, _) ), 0 ) ) ) ); }; BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END #endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) #endif //BOOST_PP_ITERATION() == 0 #if BOOST_PP_ITERATION() == BOOST_PP_ITERATION_FINISH() #if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN template struct BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) : public BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl) ::value BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION_FINISH(), P) > {}; BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END #endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) #undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME #undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN #undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END #endif //#if BOOST_PP_ITERATION() == BOOST_PP_ITERATION_FINISH() #endif //!BOOST_PP_IS_ITERATING memory_util.hpp000444000765000024 3153012161110636 24656 0ustar00alstaff000000000000Boost-Geometry-Utils-0.15/src/boost/intrusive/detail////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Pablo Halpern 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) // ////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 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) // // See http://www.boost.org/libs/intrusive for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_INTRUSIVE_ALLOCATOR_MEMORY_UTIL_HPP #define BOOST_INTRUSIVE_ALLOCATOR_MEMORY_UTIL_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include #include #include #include namespace boost { namespace intrusive { namespace detail { template inline T* addressof(T& obj) { return static_cast (static_cast (const_cast (&reinterpret_cast(obj)) ) ); } template struct unvoid { typedef T type; }; template <> struct unvoid { struct type { }; }; template <> struct unvoid { struct type { }; }; template struct LowPriorityConversion { // Convertible from T with user-defined-conversion rank. LowPriorityConversion(const T&) { } }; // Infrastructure for providing a default type for T::TNAME if absent. #define BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(TNAME) \ template \ struct boost_intrusive_default_type_ ## TNAME \ { \ template \ static char test(int, typename X::TNAME*); \ \ template \ static int test(boost::intrusive::detail:: \ LowPriorityConversion, void*); \ \ struct DefaultWrap { typedef DefaultType TNAME; }; \ \ static const bool value = (1 == sizeof(test(0, 0))); \ \ typedef typename \ ::boost::intrusive::detail::if_c \ ::type::TNAME type; \ }; \ \ template \ struct boost_intrusive_eval_default_type_ ## TNAME \ { \ template \ static char test(int, typename X::TNAME*); \ \ template \ static int test(boost::intrusive::detail:: \ LowPriorityConversion, void*); \ \ struct DefaultWrap \ { typedef typename DefaultType::type TNAME; }; \ \ static const bool value = (1 == sizeof(test(0, 0))); \ \ typedef typename \ ::boost::intrusive::detail::eval_if_c \ < value \ , ::boost::intrusive::detail::identity \ , ::boost::intrusive::detail::identity \ >::type::TNAME type; \ }; \ // #define BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(INSTANTIATION_NS_PREFIX, T, TNAME, TIMPL) \ typename INSTANTIATION_NS_PREFIX \ boost_intrusive_default_type_ ## TNAME< T, TIMPL >::type \ // #define BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(INSTANTIATION_NS_PREFIX, T, TNAME, TIMPL) \ typename INSTANTIATION_NS_PREFIX \ boost_intrusive_eval_default_type_ ## TNAME< T, TIMPL >::type \ // }}} //namespace boost::intrusive::detail #include #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME pointer_to #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, )) #include BOOST_PP_ITERATE() #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME static_cast_from #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, )) #include BOOST_PP_ITERATE() #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME const_cast_from #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, )) #include BOOST_PP_ITERATE() #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME dynamic_cast_from #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, )) #include BOOST_PP_ITERATE() namespace boost { namespace intrusive { namespace detail { BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(element_type) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type) ////////////////////// //struct first_param ////////////////////// template struct first_param { typedef void type; }; #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template